Визуализатор плана выполнения SQL

Вставьте вывод EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) — строит дерево стоимости, отмечает расхождения оценочных и фактических строк и предлагает индексы

Инструмент разбирает реальный вывод EXPLAIN — не статичный текст запроса — и строит план выполнения в виде дерева с отступами, окрашенного по серьёзности.

Поддерживаемые входы (авто-определение или выбор):

  • PostgreSQL: JSON EXPLAIN (FORMAT JSON, ANALYZE) или стандартный текстовый вывод с отступами.
  • MySQL: вывод EXPLAIN FORMAT=JSON или классический табличный EXPLAIN (id|select_type|table|type|key|rows|Extra).
  • SQLite: текст EXPLAIN QUERY PLAN (SCAN/SEARCH … USING INDEX …).

Для каждого узла: тип, таблица, индекс, оценочная стоимость/время, оценочные строки и — при EXPLAIN ANALYZE — фактические строки и время. Расхождения оценочных и фактических строк в 10× и более помечаются как статистические hotspot’ы.

Диагностика покрывает: seq/full table scan на больших таблицах, расхождения статистики (устаревший ANALYZE), filesort, временные таблицы, дорогие nested loop, не-sargable предикаты (функции на индексных столбцах), SELECT *, ORDER BY без LIMIT — с конкретными предложениями индексов или переписывания (например, «добавьте индекс на users(email)»).

Совет: для самого информативного вывода запускайте EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) в PostgreSQL или EXPLAIN ANALYZE в MySQL, чтобы сравнить оценки с реальностью.

Примеры результатов

1 Примеры

Визуализировать EXPLAIN ANALYZE PostgreSQL с расхождением строк

Seq Scan: оценка 1000, реально 95000 — классический hotspot устаревшей статистики с предложением индекса.

Execution plan tree with divergence hotspot and index suggestion.
Показать параметры ввода
{ "explainOutput": "[\n {\n \"Plan\": {\n \"Node Type\": \"Seq Scan\",\n \"Relation Name\": \"users\",\n \"Alias\": \"users\",\n \"Filter\": \"((email)::text = '[email protected]')\",\n \"Plan Rows\": 1000,\n \"Plan Width\": 142,\n \"Total Cost\": 1541.00,\n \"Actual Rows\": 95000,\n \"Actual Loops\": 1,\n \"Actual Startup Time\": 0.1,\n \"Actual Total Time\": 12.4\n }\n }\n]", "dialect": "auto", "sql": "SELECT * FROM users WHERE lower(email) = '[email protected]'", "maxDepth": 20 }

Ключевые факты

Категория
Разработка и 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-кода.

Сценарии использования

Анализ и устранение причин медленной работы сложных JOIN-запросов в PostgreSQL с помощью визуализации дерева Nested Loops и Hash Join.
Поиск скрытых операций Full Table Scan (Seq Scan) на больших таблицах в MySQL для добавления оптимальных индексов.
Диагностика устаревшей статистики планировщика путем сравнения оценочного и реального времени выполнения шагов запроса.

Примеры

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)`), что мешает базе данных использовать индекс напрямую.

Безопасно ли отправлять планы выполнения?

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

Документация API

Конечная точка запроса

POST /ru/api/tools/sql-explain-plan-visualizer

Параметры запроса

Имя параметра Тип Обязательно Описание
explainOutput textarea Да -
dialect select Нет -
sql textarea Нет -
maxDepth number Нет -

Формат ответа

{
  "result": "
Processed HTML content
", "error": "Error message (optional)", "message": "Notification message (optional)", "metadata": { "key": "value" } }
HTML: HTML

Документация MCP

Добавьте этот инструмент к конфигурации сервера MCP:

{
  "mcpServers": {
    "elysiatools-sql-explain-plan-visualizer": {
      "name": "sql-explain-plan-visualizer",
      "description": "Вставьте вывод EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) — строит дерево стоимости, отмечает расхождения оценочных и фактических строк и предлагает индексы",
      "baseUrl": "https://elysiatools.com/mcp/sse?toolId=sql-explain-plan-visualizer",
      "command": "",
      "args": [],
      "env": {},
      "isActive": true,
      "type": "sse"
    }
  }
}

Вы можете объединять несколько инструментов, например: `https://elysiatools.com/mcp/sse?toolId=png-to-webp,jpg-to-webp,gif-to-webp`, максимум 20 инструментов.

Если вы столкнулись с проблемами, пожалуйста, свяжитесь с нами по адресу [email protected]