Проверяет умение анализировать план выполнения SQL-запроса и находить причины медленной работы.
Когда вы выполняете SQL-запрос, база данных не просто читает строки подряд — она строит план выполнения, который определяет, как именно получить данные: какие таблицы сканировать, в каком порядке соединять, какие индексы использовать. Этот план можно посмотреть с помощью команды EXPLAIN (в PostgreSQL, MySQL, Oracle и других СУБД есть аналоги).
Например, в PostgreSQL:
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 123;Результат покажет узлы плана, например Seq Scan on orders (полное сканирование) или Index Scan using idx_orders_customer (использование индекса). Ключевые метрики — это cost (относительная стоимость), rows (оценка количества строк) и actual time (реальное время выполнения).
Seq Scan — если он выполняется на таблице с миллионами строк, это почти всегда проблема.WHERE, JOIN и ORDER BY.rows) с фактическим количеством (actual rows) — большое расхождение говорит о устаревшей статистике.Также полезно включить ANALYZE (в PostgreSQL — EXPLAIN ANALYZE), чтобы увидеть реальное время выполнения каждого шага, а не только оценку.
Предположим, у вас есть таблица orders с 10 миллионами записей и запрос:
SELECT * FROM orders WHERE order_date > '2024-01-01';Если план показывает Seq Scan, значит, база читает все строки. Решение — создать индекс:
CREATE INDEX idx_orders_date ON orders(order_date);После этого план изменится на Index Scan, и запрос станет значительно быстрее.
В PostgreSQL можно использовать расширение pg_stat_statements для поиска самых медленных запросов в целом. В MySQL — EXPLAIN FORMAT=JSON для детального анализа. Также полезно обновлять статистику (ANALYZE в PostgreSQL, OPTIMIZE TABLE в MySQL), чтобы планировщик принимал правильные решения.
Вывод: Определение узкого места начинается с изучения плана выполнения через EXPLAIN. Это помогает быстро выявить отсутствие индексов, неэффективные соединения или устаревшую статистику. Применяйте этот подход при оптимизации любых медленных запросов, особенно на больших таблицах.
Уровень
Рейтинг:
5
Сложность:
4
Навыки
Postgres
SQL
Ключевые слова
Подпишись на Golang Developer в телеграм