Оптимизация запросов

Часто встречаю ситуацию, когда разработчики по умолчанию добавляют индексы на каждое поле WHERE, но запросы всё равно работают медленно.

Миф: индексы всегда ускоряют запросы На самом деле, индекс может даже замедлить выполнение, если:

  • Запрос возвращает слишком много строк — сканирование индекса будет дороже, чем полное сканирование таблицы.
  • Индекс не покрывает весь запрос — приходится делать обращения к основной таблице.
  • Слишком много индексов — это замедляет INSERT/UPDATE/DELETE.

Как правильно анализировать?

Используйте EXPLAIN ANALYZE (PostgreSQL) или EXPLAIN FORMAT=JSON (MySQL) для понимания:

  • Используется ли индекс?
  • Сколько строк проходит сканирование?
  • Есть ли операции сортировки, которые можно избежать с индексом?

Что делать, если запрос медленный?

  • Проверить план выполнения (не добавлять индекс вслепую!).
  • Подумать о составных индексах, если запрос фильтрует по нескольким полям.
  • Проверить, можно ли избежать сортировки (ORDER BY по индексу).
  • Рассмотреть материализованные представления для сложных агрегатов.

От Grizly715