ИндексыСредний
EXPLAIN
Показывает план выполнения запроса без реального выполнения — какие индексы и типы соединений выберет планировщик.
Синтаксис
EXPLAIN SELECT ...;
EXPLAIN (FORMAT JSON) SELECT ...;Объяснение
EXPLAIN не выполняет запрос — только строит и показывает план: какие сканы использовать (Seq Scan / Index Scan), в каком порядке соединять таблицы, оценку числа строк и стоимости (cost) на каждом шаге.
Поскольку запрос реально не выполняется, EXPLAIN безопасен на любых данных — можно смотреть план даже для UPDATE/DELETE без риска что-то изменить.
Пример
EXPLAIN SELECT * FROM orders WHERE user_id = 5;Связанные термины
EXPLAIN ANALYZEРеально выполняет запрос и показывает фактическое время и число строк — в сравнении с оценкой планировщика.INDEX (индекс)Структура данных, ускоряющая поиск строк по значению колонки.Seq Scan / Index ScanSeq Scan — полное сканирование таблицы. Index Scan — поиск через индекс. EXPLAIN показывает какой метод выбран.
Анекдоты по теме
Пользователь: — Почему мой запрос ничего не вернул? DBA: — А ты проверил регистр? Пользователь: — Да. DBA: — А пробелы? Пользователь: — Да. DBA: — А кодировку? Пользователь: — О господи...
— Мой запрос работает 10 секунд. Как ускорить? — Покажи EXPLAIN ANALYZE. — Вот: Seq Scan, cost=0..999999. — Индекс. — Уже 0.5 секунды. — Теперь смотри на остальные узлы.
— Мой EXPLAIN показывает Seq Scan. — Добавь индекс. — Добавил. Всё равно Seq Scan. — Сколько строк в таблице? — 50. — Оптимизатор умнее тебя. При 50 строках индекс медленнее.