Получить доступ

Запрос стал работать медленно. С чего правильно начать разбор?

JuniorОптимизация запросовSQLPostgreSQL
Ещё спрашивают так:
  • С чего начать оптимизацию медленного запроса?
Коротко

Сначала измерить: EXPLAIN ANALYZE покажет, что реально происходит, вместо догадок. Затем — по находке: индекс, переписанный запрос, статистика, N+1.

  • Найти медленные запросы: pg_stat_statements, лог медленных запросов
  • В плане: Seq Scan большой таблицы, ошибка оценки строк, сортировка на диске
  • Проверить, не ждёт ли запрос блокировку

А ещё Изменение без измерения «до и после» — гадание

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

План отвечает на ключевые вопросы: читается ли таблица целиком, используется ли индекс, каким способом выполняется соединение и насколько оценка числа строк совпадает с реальностью. Без него оптимизация превращается в перебор гипотез, а добавленные наугад индексы замедляют запись и занимают место, ничего не ускоряя. Порядок такой: воспроизвести проблему, посмотреть план, изменить одно, снова измерить.

Что хотят услышать

  • Измерение через план.
  • Где искать медленные запросы.
  • Типичные находки.

Частые ошибки

  • Добавлять индексы, не посмотрев план.
  • Оптимизировать запрос, который не является узким местом.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Посмотреть план выполнения через EXPLAIN и понять, как база на самом деле выполняет запрос
  • ✗Сразу добавить индексы на все колонки из условия WHERE
  • ✗Увеличить объём памяти на сервере базы данных
  • ✗Переписать запрос через подзапросы вместо соединений

Что спросят дальше

  • Чем EXPLAIN ANALYZE отличается от EXPLAIN?
  • Почему лишние индексы вредны?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем