SQLLab
Теория· 8 мин· 10 XP

Что такое план запроса и зачем его читать

Прежде чем выполнить SQL, PostgreSQL составляет план: выбирает, какие таблицы читать, в каком порядке, как соединять.

Команды EXPLAIN

sql
-- Показать план без выполнения:
EXPLAIN SELECT * FROM orders WHERE status = 'delivered';

-- Выполнить и показать реальную статистику:
EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'delivered';

-- Максимум информации:
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM orders WHERE status = 'delivered';

Пример вывода

код
Seq Scan on orders  (cost=0.00..1.50 rows=40 width=52)
                         (actual time=0.012..0.031 rows=27 loops=1)
  Filter: ((status)::text = 'delivered'::text)
  Rows Removed by Filter: 13
Planning Time: 0.085 ms
Execution Time: 0.052 ms

Что здесь написано

ПолеЗначение
Seq ScanМетод доступа — последовательное чтение всей таблицы
cost=0.00..1.50Оценка: стоимость старта..стоимость завершения (условные единицы)
rows=40Оценка количества строк (планировщик)
actual time=0.012..0.031Реальное время (мс)
actual rows=27Реальное количество строк
Rows Removed by Filter: 13Строк отброшено фильтром

Правило

cost — не секунды. Это относительные единицы планировщика. Чем выше cost, тем «дороже» операция.

Прочитайте урок до конца — прогресс засчитается автоматически