Общие сведения об инструкции EXPLAIN
С помощью инструкции EXPLAIN можно отобразить план выполнения запроса. EXPLAIN можно использовать с любыми инструкциями SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE и CREATE TABLE AS.
В объяснении отображается план выполнения для запроса, позволяющий понять, как Выполняется инструкция PostgreSQL, используются ли индексы, как объединяются таблицы, а также о том, как создаются таблицы, а также о затратах на запрос.
Синтаксис EXPLAIN выглядит следующим образом:
EXPLAIN [ (parameter [, ...] ) ] statement
Ниже перечислены необязательные параметры.
- Анализ
- VERBOSE
- COSTS
- BUFFERS
- FORMAT
Например:
EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;
Этот простой запрос возвращает следующую информацию:
Анализ
Этот параметр выполняет инструкцию и возвращает план запроса. Выходные данные инструкции удаляются, но она все равно выполняется. Инструкции ROLLBACK и EXPLAIN ANALYZE можно объединить, чтобы предотвратить применение изменений с запросом, который вносит изменения в базу данных, например INSERT, UPDATE или DELETE. Например:
BEGIN;
> EXPLAIN ANALYZE INSERT INTO Animal
> (ani_id, name, weight_kg, cat_id, enc_id)
> VALUES (28, 'Robin Robin', 0.5, 1, 2);
ROLLBACK;
VERBOSE
Отображает дополнительные сведения, включая:
- Список выходных столбцов для каждого узла в дереве плана
- Имена таблиц и функций, квалифицированных по схеме
- имена переменных в выражениях вместе с псевдонимом таблицы
- Имя каждого триггера, для которого отображается статистика
COSTS
Включает предполагаемые начальные и общие затраты, а также количество строк и их предполагаемую ширину.
BUFFERS
Буферы можно использовать только с параметром ANALYZE. В PostgreSQL используется наиболее давно использовавшийся (LRU) кэш для хранения часто используемых данных в памяти. Буферы отображают объем данных, поступающих из кэша, и данных, извлеченных с диска. Отображается количество общих, локальных и временных выполненных блоков строк, операций чтения и записи. Данные, предоставляемые параметром BUFFERS, могут помочь изучить части запроса с большим количеством операций ввода-вывода.
FORMAT
Определяет формат выходных данных. XML, JSON и YAML содержат те же сведения, что и формат TEXT, но эти форматы проще использовать в программах. По умолчанию задан формат TEXT.