Сначала воспроизвожу запрос с реальными параметрами и смотрю план выполнения, фактическое время, число строк и ожидания. Затем проверяю индексы, оценки кардинальности, объём чтения и блокировки.
Как вы будете дебажить медленный SQL-запрос?
Сначала воспроизвожу запрос с реальными параметрами и смотрю план выполнения, фактическое время, число строк и ожидания. Затем проверяю индексы, оценки кардинальности, объём чтения и блокировки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала воспроизвожу запрос с реальными параметрами и смотрю план выполнения, фактическое время, число строк и ожидания. Затем проверяю индексы, оценки кардинальности, объём чтения и блокировки.
EXPLAIN ANALYZE действительно выполняет запрос, поэтому на production его используют осторожно, особенно для записей. Сравниваю ожидаемое и фактическое число строк, дорогие join, сортировки с выходом на диск, повторные сканирования и фильтры. Проверяю свежесть статистики и селективность условий. Изменяю одну гипотезу за раз, затем измеряю результат на сопоставимых данных. Иногда проблема находится в N+1 запросах приложения, а не в одном SQL.