Теория· 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, тем «дороже» операция.
Прочитайте урок до конца — прогресс засчитается автоматически