После регистрацииПродукт

Медленный SQL: разбор EXPLAIN без опасных правок

Диагностика запроса по плану выполнения, схеме и индексам

14 октября 20264 мин Средний55

Какую задачу решает

Разобрать медленный запрос по EXPLAIN и составить безопасный план ускорения

Что будет на выходе

Объяснение узких мест и план проверки ускорения без опасных правок

Кому подойдёт

Вайбкодер, у которого страница грузится секунды, а агент предлагает случайные индексы

Инструменты
Claude CodeCodex

Что делает

Когда страница работает 4 секунды, просьба «оптимизируй SQL» часто заканчивается произвольными индексами. Этот промпт заставляет агента сначала исследовать план выполнения, реальный запрос и ограничения, и лишь затем предлагать изменения.

На вход: SQL, СУБД и версия, обезличенный EXPLAIN / EXPLAIN ANALYZE, схема ключевых таблиц и существующих индексов, ориентировочные объёмы данных. Для production не запускай дорогие измерения без оценки риска.

На выход: объяснение плана, несколько гипотез ускорения, план измерений до/после, риски индексов и откат. Автоматические миграции запрещены.

Почему медленный SQL нельзя чинить наугад

Когда страница грузится секунды, агент почти всегда предлагает «добавить индекс». Иногда это помогает, но часто индекс не используется вовсе, замедляет запись в таблицу или лечит не тот запрос. Поэтому сначала смотрят, на что база тратит время, и только потом что-то меняют. Это и показывает EXPLAIN.

Что искать в EXPLAIN в первую очередь

  • Seq Scan по большой таблице. База читает её целиком, хотя нужно несколько строк. Частый признак, что под условие WHERE нет подходящего индекса или условие написано так, что индекс не применить (например, функция над колонкой).
  • Расхождение оценки и факта. В EXPLAIN ANALYZE видно, сколько строк планировщик ожидал и сколько получил. Ошибка в разы значит, что статистика устарела и план выбран неверно.
  • Тяжёлая сортировка или Hash, ушедшие на диск. Запрос упирается в память, индекс тут не поможет.
  • Nested Loop на тысячах строк. Подзапрос выполняется для каждой строки внешней таблицы — классика, когда в коде запрос в цикле.

Чем опасна оптимизация на проде

EXPLAIN ANALYZE реально выполняет запрос: для UPDATE и DELETE это реальное изменение данных, а для тяжёлого SELECT — нагрузка на рабочую базу. Создание индекса на большой таблице без CONCURRENTLY блокирует запись. Поэтому порядок такой: разбор плана, гипотеза, проверка на копии или в безопасном окне, замер до и после.

Промпт дальше ведёт агента ровно по этому порядку и запрещает трогать схему, пока нет плана проверки и отката.

Рядом по теме: Нужна ли база данных: решение без лишней сложности, Cursor Rules для базы данных: database.mdc без потерь, ER-диаграмма контент-завода, статья «Что такое вайбкодинг» и Чек-лист «Перед запуском» (бесплатно).

Закрытая часть

Дальше — для участников

Регистрация бесплатная и занимает минуту. Часть закрытых материалов откроется сразу, без карты.

вайбкодингаудитданныетестирование

Читайте дальше