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

<b>Сложный SQL можно ускорить без магии: сначала уберите лишнюю работу</b>

<b>Сложный SQL можно ускорить без магии: сначала уберите лишнюю работу</b>

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

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

Посмотрим, что тут с I/O в реальности. Если план показывает Seq Scan там, где вы ждете Index Scan, сначала смотрите на селективность и типы сравнений, потом уже на индексы. Частая ошибка — оборачивать поле функцией: WHERE date(created_at) = ... почти всегда хуже, чем диапазон по исходному столбцу.

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

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

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

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

start

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

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

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