Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья3 мин чтенияПросмотры2

Как читать EXPLAIN для SELECT в MySQL без поспешных выводов

Первый разбор плана запроса: выбранные индексы, оценка строк и порядок доступа. Объясняем, почему EXPLAIN ANALYZE требует отдельного решения.

Сравнение результатов технического анализа на рабочем столе
В этой статье

Страница каталога работает медленно, и подозрение падает на SQL. План запроса помогает понять, как оптимизатор собирается получать данные. Но он не является автоматическим диагнозом: оценка числа строк и выбранный индекс требуют контекста, а реальная задержка зависит ещё и от нагрузки, данных и ожиданий.

Начните с известного простого запроса

Пример предназначен для MySQL 8.x. Используйте тестовую копию с репрезентативными данными и аккаунт с необходимыми правами чтения. Таблица products, поля id и active в примере условные: замените их на объекты своей схемы.

EXPLAIN SELECT id FROM products WHERE active = 1 LIMIT 20;

Не выполняйте пример буквально, если такой таблицы нет. Для анализа проблемы нужен реальный запрос приложения с понятными параметрами. Сложные выражения и вызываемые функции сначала изучают отдельно: чтение плана не следует считать универсальной гарантией отсутствия побочных эффектов для произвольного SQL.

Разберите способ доступа

В традиционном выводе обратите внимание на таблицу, тип доступа, возможные индексы, выбранный индекс и оценку строк. Поле possible_keys не означает, что все перечисленные индексы использованы. Поле key описывает фактически выбранный вариант в этом плане.

Оценка rows — не точный счётчик прочитанных строк реального выполнения. Статистика и распределение данных влияют на ожидания оптимизатора. Поэтому сравнивайте планы на данных, похожих на рабочие, а не только на пустой тестовой таблице.

Полный просмотр таблицы не всегда ошибка

Для маленькой таблицы или запроса, который выбирает большую часть данных, последовательный просмотр может быть разумным. Наличие индекса тоже не гарантирует быстрый ответ: индекс может отбирать слишком много записей или не соответствовать условиям.

Пример: фильтр по признаку, который установлен почти у всех товаров, имеет низкую избирательность. Добавление индекса только на этот признак не обязано помочь. Нужно учитывать весь запрос, сортировку, соединения таблиц и действительное распределение значений.

Не путайте EXPLAIN и EXPLAIN ANALYZE

EXPLAIN ANALYZE действительно выполняет запрос и показывает измеренные сведения. На тяжёлом запросе это создаёт реальную нагрузку. Не добавляйте этот режим на рабочем сервере как безобидное расширение команды просмотра плана.

Если нужны фактические измерения, выберите подходящую среду и ограничения вместе с администратором. Даже обычный SELECT может читать большой объём, конкурировать за ресурсы и удерживать нужные приложению объекты. В этой инструкции фактический прогон тяжёлого запроса не требуется.

Сравнивайте одно изменение за раз

Сохраните исходный запрос, параметры, версию сервера и план. После изменения индекса или SQL повторите анализ на сопоставимых данных. Затем отдельно измерьте время выполнения и влияние на другие операции. Индекс ускоряет одни чтения, но требует места и обслуживания при записи.

Не объявляйте оптимизацию завершённой только потому, что в плане появился индекс. Нужен результат для пользовательского сценария: быстрее ли открывается каталог, уменьшилась ли нагрузка и сохранилась ли корректность выборки. План помогает объяснить решение, но не заменяет проверку самого приложения.

Обсуждение0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.