Ключевые факты
- Категория
- Разработка и Web
- Типы входных данных
- textarea, select, number
- Тип результата
- html
- Покрытие примерами
- 4
- API доступен
- Yes
Обзор
Визуализатор плана выполнения SQL преобразует сложный текстовый или JSON-вывод команд EXPLAIN и EXPLAIN ANALYZE для PostgreSQL, MySQL и SQLite в интерактивное дерево стоимости. Инструмент автоматически выявляет узкие места производительности, такие как сканирование таблиц (Seq Scan), расхождения в статистике строк и неоптимальные индексы, предлагая готовые рекомендации по оптимизации запросов.
Когда использовать
- •При оптимизации медленных SQL-запросов в PostgreSQL, MySQL или SQLite, когда текстовый вывод EXPLAIN слишком сложен для ручного анализа.
- •Для поиска расхождений между оценочным и фактическим количеством строк (статистических hotspot'ов) после выполнения EXPLAIN ANALYZE.
- •При необходимости быстро определить недостающие индексы или выявить неэффективные операции, такие как filesort и временные таблицы.
Как это работает
- •Вставьте текстовый или JSON-вывод команды EXPLAIN / EXPLAIN ANALYZE в поле ввода и выберите соответствующий SQL-диалект (или оставьте автоопределение).
- •Инструмент парсит структуру плана, строит иерархическое дерево выполнения и рассчитывает стоимость, время и количество строк для каждого узла.
- •Алгоритм сравнивает оценочные показатели с фактическими, подсвечивает критические расхождения (более чем в 10 раз) и анализирует операции на наличие проблем.
- •Вы получаете наглядную визуализацию плана с цветовой кодировкой проблемных зон и конкретными рекомендациями по созданию индексов или переписыванию SQL-кода.
Сценарии использования
Примеры
1. Оптимизация Seq Scan в PostgreSQL
Backend-разработчик- Контекст
- Разработчик заметил, что запрос к таблице пользователей выполняется слишком медленно при фильтрации по email.
- Проблема
- Выявление причин медленного сканирования таблицы (Seq Scan) вместо использования индекса.
- Как использовать
- Вставьте JSON-вывод `EXPLAIN (FORMAT JSON, ANALYZE)` запроса `SELECT * FROM users WHERE lower(email) = '[email protected]'` в поле ввода и нажмите кнопку визуализации.
- Пример конфигурации
-
dialect: postgresql, maxDepth: 20 - Результат
- Инструмент подсветил узел Seq Scan красным цветом из-за расхождения строк (оценка 1000, факт 95000) и выдал рекомендацию создать функциональный индекс `CREATE INDEX ON users (lower(email))`.
2. Устранение Filesort в MySQL
Администратор баз данных (DBA)- Контекст
- В отчетах медленных запросов MySQL часто фигурирует сортировка, приводящая к созданию временных таблиц на диске.
- Проблема
- Найти шаг плана выполнения, вызывающий неэффективную сортировку (Using filesort).
- Как использовать
- Скопируйте табличный вывод `EXPLAIN` для проблемного запроса с `ORDER BY` и вставьте его в визуализатор.
- Пример конфигурации
-
dialect: mysql - Результат
- Визуализатор построил дерево выполнения, выделил узел сортировки и предложил добавить составной индекс, включающий колонки из условий WHERE и ORDER BY, чтобы избежать filesort.
Проверить на примерах
json, sql, textСвязанные хабы
FAQ
Какие базы данных поддерживаются?
Поддерживаются PostgreSQL (JSON и текстовый формат), MySQL (JSON и табличный формат) и SQLite (EXPLAIN QUERY PLAN).
Зачем нужно указывать SQL-запрос, если он опционален?
SQL-запрос помогает точнее сопоставить узлы плана с конкретными частями кода и сформировать более точные рекомендации по индексам.
Как инструмент находит проблемы со статистикой?
Он сравнивает оценочное число строк (Plan Rows) с фактическим (Actual Rows) из EXPLAIN ANALYZE. Расхождение более чем в 10 раз указывает на устаревшую статистику.
Что означает предупреждение о "non-sargable" предикате?
Это означает использование функций на индексируемых колонках (например, `lower(email)`), что мешает базе данных использовать индекс напрямую.
Безопасно ли отправлять планы выполнения?
Да, парсинг происходит на стороне клиента или без сохранения данных, к тому же планы выполнения содержат только структуру и метаданные, а не сами данные таблиц.