EXPLAIN
Вывод плана выполнения запроса.
Синтаксис:
EXPLAIN [ VERBOSE ] запрос
Параметры:
- VERBOSE. При наличии необязательного ключевого слова VERBOSE в плане запроса выводится дополнительная информация.
- запрос. Запрос, план выполнения которого вы хотите получить.
Результаты:
- NOTICE: QUERY PLAN: plan. За сообщением следует план выполнения запроса, полученный от сервера.
- EXPLAIN. Сообщение выводится после плана запроса и является признаком завершения выходных данных.
Описание
Команда EXPLAIN отображает план выполнения запроса, сгенерированный планировщиком PostgreSQL. Планировщиком (planner) называется компонент PostgreSQL, пытающийся выработать наиболее эффективный способ выполнения запроса SQL. В плане выполнения содержится информация о том, как будет организован просмотр таблиц, задействованных в запросе, сервером базы данных. В зависимости от ситуации возможен последовательный перебор или выборка по индексу. В план включена информация обо всех таблицах, участвующих в запросе. По выходным данным команды EXPLAIN можно оценить относительную стоимость планов выполнения запроса, измеряемую в количестве операций выборки страниц с диска.
PostgreSQL не пытается преобразовать это число в более привычные промежутки времени, поскольку результат в значительной мере зависит от требований к оборудованию и загрузки операционной системы. Таким образом, стоимость плана выполнения запроса может использоваться только как относительный критерий для сравнения с другими, альтернативными запросами.
Стоимость выражается двумя числами, разделенными точкой. Первое число определяет приблизительную стоимость инициализации (интервал времени перед получением первой записи). Второе число определяет приблизительную оценку общего времени, необходимого для полной обработки запроса.
При наличии ключевого слова VERBOSE команда EXPLAIN выводит внутреннее представление плана в виде дерева. Для среднего пользователя эта информация не представляет интереса; она предназначена для программистов, знакомых с внутренним устройством PostgreSQL.
Примеры
Ниже приведены результаты, полученные при выполнении команды EXPLAIN для запроса к таблице books базы данных booktown.
booktown=# EXPLAIN SELECT * FROM books AS b (book_id) booktown-* NATURAL INNER JOIN editions; NOTICE: QUERY PLAN: Merge Join (cost=71.27..83.96 rows=150 width=64) › Sort (cost=1.44..1.44 rows=15 width=24) › Seq Scan on books b (cost=0.00..1.15 rows=15 width=24) › Sort (cost=69.83..69.83 rows=1000 width=40) › Seq Scan on editions (cost=0.00..20.00 rows=1000 width=40) EXPLAIN
В следующем примере приведен расширенный вывод для более простого запроса с ключевым словом VERBOSE.
booktown=# EXPLAIN VERBOSE SELECT * FROM books; NOTICE: QUERY DUMP: { SEQSCAN:startup_cost 0.00:total_cost 1.15:rows 15:width 24:qptargetlist ({ TARGETENTRY:resdom { RESDOM:resno 1:restype 23:restypmod – 1:resname id :reskey 0:reskeyop 0:ressortgroupref 0:resjunk false }:expr { VAR:varno 1 :varattno 1:vartype 23:vartypmod – 1:varlevelsup 0:varnoold 1:varoattno 1}} { TARGETENTRY:resdom { RESDOM:resno 2:restype 25:restypmod – 1:resname title:reskey 0 :reskeyop 0:ressortgroupref 0:resjunk false }:expr { VAR:varno 1 :varattno 2:vartype 25:vartypmod – 1:varlevelsup 0:varnoold 1:varoattno 2}} { TARGETENTRY:resdom { RESDOM:resno 3:restype 23:restypmod – 1:resname authoMd:reskey 0:reskeyop 0:ressortgroupref 0:resjunk false }:expr { VAR:varno 1:varattno 3:vartype 23:vartypmod – 1:varlevelsup 0:varnoold 1:varoattno 3}} { TARGETENTRY:resdom { RESDOM:resno 4:restype 23:restypmod -1:resname subject_id:reskey 0:reskeyop 0:ressortgroupref 0:resjunk false } :expr { VAR:varno 1:varattno 4:vartype 23:vartypmod – 1:varlevelsup 0 :varnoold 1:varoattno 4}}):qpqual <>:lefttree <>:righttree <>:extprm 0:locprm 0:initplan <>:nprm 0:scanrelid 1 } NOTICE: QUERY PLAN: Seq Scan on books (cost=0.00..1.15 rows=15 width=24) EXPLAIN