Оптимизация запросов: Индексы vs. Анализ плана выполнения

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
10,308
Реакции
1,590
Credits
37,684
Оптимизация запросов: Индексы vs. Анализ плана выполнения

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

Миф: индексы всегда ускоряют запросы
На самом деле, индекс может даже замедлить выполнение, если:
1. Запрос возвращает слишком много строк - сканирование индекса будет дороже, чем полное сканирование таблицы.
2. Индекс не покрывает весь запрос - приходится делать обращения к основной таблице.
3. Слишком много индексов - это замедляет INSERT/UPDATE/DELETE.

Как правильно анализировать?
Используйте EXPLAIN ANALYZE (PostgreSQL) или EXPLAIN FORMAT=JSON (MySQL) для понимания:
1. Используется ли индекс?
2. Сколько строк проходит сканирование?
3. Есть ли операции сортировки, которые можно избежать с индексом?

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