Оптимизация производительности баз

Индексы без плана — это ускоритель SELECT и тормоз для записи

Индексы без плана — это ускоритель SELECT и тормоз для записи

Коллеги, давайте разберем план выполнения. Индекс нужен не «на всё подряд», а под конкретный профиль запросов. Сначала смотрим, где реально тратится время: full scan, сортировки, nested loop с лишними чтениями, блокировки на записи. Золотое правило: сначала мониторинг, потом индексы.

Базовая схема простая: • equality-предикаты — в начало составного индекса; • диапазоны — после точных условий; • сортировку покрывать только если она часто в критичном запросе; • не дублировать индексы с одинаковым префиксом. Иначе получите лишний I/O, рост времени на INSERT/UPDATE и веселую жизнь при перестроении.

Отдельно смотрите на селективность. Индекс по колонке с низкой кардинальностью часто бесполезен: оптимизатор может выбрать scan, и будет прав. Для частичных выборок лучше работает составной или фильтрованный индекс, чем один «широкий» на все случаи. Схема простая, но дьявол кроется в статистике.

Плохой паттерн — много индексов «на всякий случай». В продакшене так лучше не делать, и вот почему: каждый лишний индекс = лишняя запись, больше блокировок и тяжелее обслуживание. Нормальная стратегия — оставить 2–4 реально используемых индекса на таблицу, регулярно проверять неиспользуемые и пересматривать их по логам запросов.

Если индекс не объясняется конкретным запросом и его планом — его, скорее всего, не должно быть.
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.