Команда EXPLAIN в SQL показывает план выполнения запроса, то есть как СУБД собирается получить данные (например, последовательное сканирование таблицы, использование индексов и т.д.). Это помогает понять, насколько эффективно написан запрос.
[имя] спросил: В чём разница между EXPLAIN и EXPLAIN ANALYZE в PostgreSQL, и на что нужно смотреть при сравнении планов двух запросов (используется ли индекс и т.д.)?
Команда EXPLAIN в SQL показывает план выполнения запроса, то есть как СУБД собирается получить данные (например, последовательное сканирование таблицы, использование индексов и т.д.).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Команда EXPLAIN в SQL показывает план выполнения запроса, то есть как СУБД собирается получить данные (например, последовательное сканирование таблицы, использование индексов и т.д.). Это помогает понять, насколько эффективно написан запрос.
Добавление ANALYZE к EXPLAIN (EXPLAIN ANALYZE) запускает сам запрос и выводит фактическое время выполнения каждого шага и количество обработанных строк. Это даёт более точную информацию о производительности.
Индекс может быть бесполезен, если:
- Запрос выбирает большую часть таблицы (например, более 30-40%), тогда СУБД может предпочесть полное сканирование.
- Колонка с индексом содержит мало уникальных значений (низкая селективность).
- Запрос использует функции или операции, которые не могут использовать индекс (например,
LIKE '%abc'). - Индекс не покрывает все необходимые поля для запроса, и требуется дополнительное обращение к таблице.
Пример:
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;
Выведет план и реальные затраты на выполнение запроса.