EXPLAIN
Показывает план выполнения запроса без реального выполнения — какие индексы и типы соединений выберет планировщик.
EXPLAIN SELECT ...;
EXPLAIN (FORMAT JSON) SELECT ...;Объяснение
Пример
EXPLAIN SELECT * FROM orders WHERE user_id = 5;Связанные термины
Анекдоты по теме
— Что такое TABLESAMPLE? — Выборка случайных строк без полного скана. SELECT * FROM orders TABLESAMPLE BERNOULLI(1); — 1% строк случайно. — Зачем? — Быстрая оценка данных, тестирование на подвыборке. — Чем отличается BERNOULLI от SYSTEM? — BERNOULLI: каждая строка с вероятностью p%. SYSTEM: случайные блоки страниц — быстрее, менее равномерно.
— Зачем нормализовать базу данных? — Чтобы не хранить одно и то же в разных местах. — А денормализовать? — Чтобы читать быстро, не делая JOIN. — Значит, нужно найти баланс? — Именно. Это называется «проектирование схемы».
Программист пишет пагинацию: SELECT * FROM posts ORDER BY created_at LIMIT 20 OFFSET 10000; — Работает медленно на больших страницах. DBA: OFFSET 10000 значит база читает 10020 строк и выбрасывает 10000. — Как исправить? — Keyset pagination: WHERE created_at < $last_seen ORDER BY created_at DESC LIMIT 20