Использование EXPLAIN
Выполнение запроса с помощью EXPLAIN
Перед выполнением запроса, планировщик формирует план выполнения, посмотреть план выполнения можно с помощью команды EXPLAIN.
Структура плана запроса представляет собой деревовидную структуру из узлов( plan nodes ). Узлы на нижнем уровне отвечают за просмотр и выдачу строк с помощью методов доступа, если требуется дополнительные операции (агрегирование, соединение, сортировка), над узлами выборки будут располагаться дополнительные узлы дерева.
Для каждого узла дерева команда EXPLAIN выводит одну строку с оценкой стоимости операции на каждом узле
demo=# EXPLAIN SELECT * FROM bookings.aircrafts;
QUERY PLAN
----------------------------------------------------------
Seq Scan on aircrafts (cost=0.00..1.09 rows=9 width=52)
(1 row)
Seq Scan - последовательный просмотр (sequential scan), т.е. перебираются все строки, так как в выбрке не используется условие WHERE
cost=0.00 - оценка ресурсов, в данном случае = 0 так как запрос не пользует дополнительные операции
1.09 - общая оценка стоимости запроса
9 - число строк
52 - ширина строки или размер строки в байтах
При использовании дополнительного условия WHERE будет видно дополнительные критери
demo=# EXPLAIN SELECT * FROM bookings.aircrafts WHERE model ~'^Air';
QUERY PLAN
----------------------------------------------------------
Seq Scan on aircrafts (cost=0.00..1.11 rows=1 width=52)
Filter: (model ~ '^Air'::text)
(2 rows)
Оценка числа строк изменилась на 1, по факту в выводе будет 3 строки, 2 rows это не число строк в выбрке а число строк текущей команды
Более сложный запрос с сортировкой данных
demo=# EXPLAIN SELECT * FROM bookings.aircrafts
demo-# ORDER BY aircraft_code ;
QUERY PLAN
----------------------------------------------------------------
Sort (cost=1.23..1.26 rows=9 width=52)
Sort Key: aircraft_code
-> Seq Scan on aircrafts (cost=0.00..1.09 rows=9 width=52)
(3 rows)
Здесь дополнительный узел указывается стрелкой ->
На верхнем поле выполняется сортировка выбранных строк и занимет время 1.23
Нужно понимать, что времени на саму сортировку потребуется меньшь, так как 1.23 это не только сортировка, сюда еще входит оценка стоимости получения выборки 1.09
Когда таблица слишком мала, то операция поиска по индексу не даст хороший результат, так как обращение к индексу по сути это дополнительная операция
Источники
Связанные темы
Оптимизация запросов в Postgresql
Использование модуля pg_stat_statements в postgresql
Управление планировщиком в Postgresql
Основные команды psql и sql Postgresql
Методы формирования соединений наборов строк