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

Сложный SQL тормозит не из-за «плохого сервера», а из-за лишней работы

Сложный SQL тормозит не из-за «плохого сервера», а из-за лишней работы

Коллеги, давайте разберем план выполнения. Типовая ошибка — лечить запрос индексом, не поняв, где он тратит время: на full scan, сортировку, hash join или повторные чтения. Сначала смотрим фактический план, а не догадки: где выросли строки, где сломалась селективность, где optimizer выбрал дорогой путь.

Дальше чистим сам запрос:
— убираем SELECT *, если тащите лишние колонки;
— не прячем фильтр в функцию над полем, если нужен поиск по индексу;
— заменяем коррелированные подзапросы на JOIN или EXISTS, если это снижает повторные проходы;
— делим монстра на этапы через CTE или временные таблицы, когда это помогает зафиксировать промежуточный набор.

Золотое правило: сначала мониторинг, потом индексы. Часто узкое место не в отсутствии индекса, а в неверной форме условия, плохой статистике или слишком широкой выборке. И да, «добавим еще один индекс» иногда просто ускоряет запись и усложняет жизнь всем остальным.

После правок снова смотрим план и фактические чтения. Если картина не меняется, значит проблема не в синтаксисе, а в модели данных, кардинальности или доступе к большим объемам I/O.

Схема простая, но дьявол кроется в статистике: сначала найдите лишнюю работу, потом уберите ее из запроса.
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.
tech

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

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

start

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

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

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