Часто встречаю ситуацию, когда разработчики по умолчанию добавляют индексы на каждое поле WHERE, но запросы всё равно работают медленно.
Миф: индексы всегда ускоряют запросы На самом деле, индекс может даже замедлить выполнение, если:
- Запрос возвращает слишком много строк — сканирование индекса будет дороже, чем полное сканирование таблицы.
- Индекс не покрывает весь запрос — приходится делать обращения к основной таблице.
- Слишком много индексов — это замедляет INSERT/UPDATE/DELETE.
Как правильно анализировать?
Используйте EXPLAIN ANALYZE (PostgreSQL) или EXPLAIN FORMAT=JSON (MySQL) для понимания:
- Используется ли индекс?
- Сколько строк проходит сканирование?
- Есть ли операции сортировки, которые можно избежать с индексом?
Что делать, если запрос медленный?
- Проверить план выполнения (не добавлять индекс вслепую!).
- Подумать о составных индексах, если запрос фильтрует по нескольким полям.
- Проверить, можно ли избежать сортировки (ORDER BY по индексу).
- Рассмотреть материализованные представления для сложных агрегатов.