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

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

> Каноническая страница: https://elysiatools.com/ru/tools/sql-explain-plan-visualizer

- **Категория:** Development

- **Ключевые слова:** explain, sql, план, индекс, база данных

## Обзор

Инструмент разбирает реальный вывод 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, чтобы сравнить оценки с реальностью.

## Входные данные

- **Вывод EXPLAIN** (textarea): Paste EXPLAIN JSON or TEXT here. e.g. PostgreSQL: \[ { "Plan": { "Node Type": "Seq Scan", "Relation Name": "users", "Actual Rows": 95000, "Plan Rows": 1000 } } \] Or indented text: Seq Scan on users (cost=0.00..1541.00 rows=1000 width=4)
- **Диалект** (select)
- **SQL-запрос (опционально)** (textarea): SELECT * FROM users WHERE lower(email) = 'a@b.com' ORDER BY created_at
- **Лимит глубины** (number)

## Когда использовать

- При оптимизации медленных 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 для добавления оптимальных индексов.
- Диагностика устаревшей статистики планировщика путем сравнения оценочного и реального времени выполнения шагов запроса.

## Частые вопросы

### Какие базы данных поддерживаются?

Поддерживаются PostgreSQL (JSON и текстовый формат), MySQL (JSON и табличный формат) и SQLite (EXPLAIN QUERY PLAN).

### Зачем нужно указывать SQL-запрос, если он опционален?

SQL-запрос помогает точнее сопоставить узлы плана с конкретными частями кода и сформировать более точные рекомендации по индексам.

### Как инструмент находит проблемы со статистикой?

Он сравнивает оценочное число строк (Plan Rows) с фактическим (Actual Rows) из EXPLAIN ANALYZE. Расхождение более чем в 10 раз указывает на устаревшую статистику.

### Что означает предупреждение о "non-sargable" предикате?

Это означает использование функций на индексируемых колонках (например, `lower(email)`), что мешает базе данных использовать индекс напрямую.

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

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

## Связанные инструменты

- [Просмотрщик игровых сохранений](https://elysiatools.com/ru/tools/game-save-viewer): Подкиньте любой файл сохранения — NBT из Minecraft, GVAS из Unreal Engine, контейнеры Palworld, текстовые JSON/XML/INI/Lua-сейвы, SQLite-профили — и получите определённый формат, версии движка, ключевые поля прогресса и ограниченное дерево структуры.
- [Планировщик миграции CSV в базу данных](https://elysiatools.com/ru/tools/csv-to-database-migration-planner): Выводит реляционную схему из CSV и генерирует CREATE TABLE и ALTER для PostgreSQL, MySQL, SQLite или SQL Server
- [Анализатор структурированных логов](https://elysiatools.com/ru/tools/structured-log-analyzer): Определяет распространенные форматы логов, извлекает ключевые поля и выводит JSON, CSV или SQL.
- [Аудитор зависимостей package.json](https://elysiatools.com/ru/tools/package-json-dependency-auditor): Проверяет package.json на гигиену зависимостей и качество диапазонов версий, а также при желании исследует транзитивное дерево из package-lock.json или yarn.lock. Отмечает дубликаты, wildcard/pre-release, неотсортированные ключи, отсутствующие метаданные и неверную классификацию runtime/dev зависимостей.
- [Анализатор прогноза и сезонности](https://elysiatools.com/ru/tools/time-series-forecast-seasonality-analyzer): Строит прогноз по CSV или JSON временным рядам и показывает тренд, сезонность и остатки в одном отчете
- [GraphQL Playground](https://elysiatools.com/ru/tools/graphql-playground): GraphQL-клиент в браузере: пишите запросы и переменные, отправляйте их на любой GraphQL-эндпоинт и проверяйте форматированные JSON-результаты или массивы ошибок — идеально для итераций по схеме во время разработки
- [Детектор конфликтов префиксов и сокращений в mock-данных](https://elysiatools.com/ru/tools/mock-data-naming-conflict-detector): Находит визуально похожие имена полей и конфликтующие префиксы в CSV, JSON или схемах
- [Конструктор текстового конвейера](https://elysiatools.com/ru/tools/text-pipeline-builder): Выполняет переносимый рецепт очистки текста и показывает diff, время и изменения символов на каждом шаге.

## Примеры

- [Примеры SQL Скриптов](https://elysiatools.com/ru/samples/sql-samples): Примеры SQL запросов и скриптов базы данных для различных сценариев и случаев использования
- [Примеры SQL-инъекций](https://elysiatools.com/ru/samples/sql-injections): Образовательная коллекция нагрузок SQL-инъекций для тестирования безопасности, оценки уязвимостей и практики защитного кодирования
- [Образцы SQL](https://elysiatools.com/ru/samples/sql-viewer-samples): Образцы файлов для браузерного SQL просмотрщика
- [Продвинутые примеры PostgreSQL](https://elysiatools.com/ru/samples/postgresql-advanced): Продвинутые примеры базы данных PostgreSQL, включая стратегии оптимизации, сложные запросы, индексацию и настройку производительности

## Связанные материалы

- [Проверка SQL-запросов на производительность и целостность](https://elysiatools.com/ru/hubs/sql-query-review-performance-and-integrity): Собирайте, форматируйте и проверяйте SQL с логикой join, планами выполнения, рисками injection, внешними ключами и изменениями схемы.
