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

Сложный SQL не лечат «магией» — его разбирают по плану выполнения

Сложный SQL не лечат «магией» — его разбирают по плану выполнения

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

Рабочий порядок такой:
— Проверить фактический план, а не надежду оптимизатора.
— Сократить набор данных до JOIN: фильтры, предикаты, предагрегация.
— Убрать функции с колонок в WHERE и ON, иначе индекс часто превращается в декорацию.
— Смотреть на кардинальность: если оценка мимо, план легко уедет в nested loop на миллионы строк.

Частая ошибка — лечить симптом индексом на каждое поле. Индекс помогает, когда селективность есть и запрос умеет его использовать. Если проблема в GROUP BY, DISTINCT или лишнем CTE-материале, индекс только ускорит путь к той же ошибке. Посмотрим, что тут с I/O в реальности: иногда дешевле переписать подзапрос в semijoin или вынести тяжелую агрегацию в отдельный шаг.

Отдельно следите за сортировками и блокировками: ORDER BY без нужного индекса, широкие SELECT *, долгие транзакции и конкурирующие UPDATE легко превращают «просто отчет» в источник боли. В продакшене так лучше не делать, и вот почему...

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

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

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

start

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

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

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