# SQL 执行计划可视化器

粘贴 EXPLAIN / EXPLAIN ANALYZE 输出（PostgreSQL/MySQL/SQLite），渲染为成本树，标注估算行数与实际行数的偏差热点，并给出具体的索引建议

> 标准页面: https://elysiatools.com/zh/tools/sql-explain-plan-visualizer

- **分类:** Development

- **关键词:** explain, sql, 执行计划, 索引, 数据库

## 概述

本工具解析真实的 EXPLAIN 输出（而非静态 SQL 文本），将执行计划渲染为带缩进的树形视图，按严重程度着色。

支持的输入（自动识别或手动选择）：
- PostgreSQL：`EXPLAIN (FORMAT JSON, ANALYZE)` 的 JSON，或默认的缩进 TEXT 输出。
- MySQL：`EXPLAIN FORMAT=JSON` 输出，或经典表格 EXPLAIN（id|select_type|table|type|key|rows|Extra）。
- SQLite：`EXPLAIN QUERY PLAN` 文本（SCAN/SEARCH ... USING INDEX ...）。

每个节点显示：节点类型、表、所用索引、估算成本/时间、估算行数；使用 EXPLAIN ANALYZE 时还显示实际行数与耗时。估算行数与实际行数偏差达到 10 倍及以上会被标为统计热点。

诊断覆盖：大表上的顺序/全表扫描、统计偏差（ANALYZE 过期）、filesort、临时表、昂贵的嵌套循环、不可索引的谓词（索引列被函数包裹）、SELECT *、无 LIMIT 的 ORDER BY —— 每项都给出具体的索引或改写建议（如“在 users(email) 上加索引”）。

提示：为获得最丰富的输出，请在 PostgreSQL 上运行 `EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)`，或在 MySQL 上运行 `EXPLAIN ANALYZE`，以便工具比较估算与实际。

## 输入项

- **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 实际执行路径以找出性能瓶颈时。
- 怀疑数据库统计信息过期，需要对比 EXPLAIN ANALYZE 中估算行数与实际行数的偏差时。
- 面对复杂的嵌套循环或多表关联，难以通过原始文本直观理清执行计划的层级关系时。

## 工作原理

- 将 PostgreSQL (JSON/TEXT)、MySQL (JSON/表格) 或 SQLite 的 EXPLAIN 输出粘贴至输入框，并可选填原始 SQL 查询。
- 选择对应的数据库方言（或使用自动识别），并根据需要调整树的最大深度上限。
- 工具解析文本并生成带缩进和颜色标注的执行计划树，高亮显示高能耗节点与行数估算偏差超过 10 倍的统计热点，同时输出具体的索引优化建议。

## 使用案例

- 诊断大表上的全表扫描（Seq Scan / Full Table Scan）并获取缺失索引的创建建议。
- 识别因索引列被函数包裹（非 Sargable 谓词）而导致索引失效的查询节点。
- 分析复杂查询中的 Filesort 和临时表（Temporary Table）开销，优化排序与分组性能。

## 常见问题

### 支持哪些数据库的 EXPLAIN 格式？

支持 PostgreSQL（JSON 或 TEXT）、MySQL（JSON 或经典表格）以及 SQLite（EXPLAIN QUERY PLAN 文本）。

### 什么是“统计热点”？

当 EXPLAIN ANALYZE 中的实际执行行数与优化器估算行数偏差达到 10 倍及以上时，工具会将其标记为统计热点，通常意味着需要运行 ANALYZE 更新统计信息。

### 为什么建议使用 JSON 格式的 EXPLAIN 输出？

JSON 格式包含最完整的节点属性和度量数据，能让可视化器生成最精确的成本树和诊断建议。

### 工具会收集或存储我的 SQL 和执行计划数据吗？

不会，所有解析和可视化过程均在浏览器本地完成，不会向服务器上传您的敏感数据。

### 为什么我的执行计划没有显示实际行数？

只有使用 EXPLAIN ANALYZE（或 PostgreSQL 的 EXPLAIN (ANALYZE)）获取的输出才包含实际运行数据，普通的 EXPLAIN 仅包含估算数据。

## 相关工具

- [游戏存档查看器](https://elysiatools.com/zh/tools/game-save-viewer): 拖入任意游戏存档——Minecraft NBT、虚幻引擎 GVAS、幻兽帕鲁容器、JSON/XML/INI/Lua 文本存档、SQLite 档案——识别格式、引擎版本、关键进度字段并给出有界的结构树。
- [CSV 转数据库迁移规划器](https://elysiatools.com/zh/tools/csv-to-database-migration-planner): 根据 CSV 数据推断关系型 schema，并为 PostgreSQL、MySQL、SQLite 或 SQL Server 生成建表和 ALTER 迁移计划
- [结构化日志解析器](https://elysiatools.com/zh/tools/structured-log-analyzer): 自动识别常见日志格式，提取核心字段并推断字段类型，支持导出为 JSON、CSV 或 SQL。
- [package.json 依赖审计器](https://elysiatools.com/zh/tools/package-json-dependency-auditor): 审计 package.json 的依赖卫生、版本范围质量，并可选地从 package-lock.json 或 yarn.lock 深入检查传递依赖树。会标记重复依赖、通配符或预发布版本、未排序键、缺失元数据，以及运行时/开发时依赖误分类问题。
- [时间序列预测与季节性分析](https://elysiatools.com/zh/tools/time-series-forecast-seasonality-analyzer): 从 CSV 或 JSON 时间序列数据中预测未来数期，并在一份报告中查看趋势、季节项和残差分解
- [GraphQL Playground](https://elysiatools.com/zh/tools/graphql-playground): 浏览器内的 GraphQL 客户端：编写查询与变量，发送到任意 GraphQL 端点，查看格式化的 JSON 结果或错误数组——开发阶段快速迭代 Schema 的理想工具
- [Mock Data 命名前缀 / 缩写冲突检测器](https://elysiatools.com/zh/tools/mock-data-naming-conflict-detector): 检测 CSV、JSON 或 schema 中视觉易混淆的字段名和前缀冲突，并给出更清晰的改名建议
- [文本流水线构建器](https://elysiatools.com/zh/tools/text-pipeline-builder): 执行可移植的文本清洗配方，并查看每步 diff、耗时和字符变化。

## 示例

- [SQL 脚本示例](https://elysiatools.com/zh/samples/sql-samples): 各种场景和用例的 SQL 查询示例和数据库脚本
- [SQL注入示例](https://elysiatools.com/zh/samples/sql-injections): 用于安全测试、漏洞评估和防御编码实践的SQL注入载荷教育集合
- [SQL 查看器样本](https://elysiatools.com/zh/samples/sql-viewer-samples): 用于浏览器内 SQL 查看器的样本文件
- [PostgreSQL 高级示例](https://elysiatools.com/zh/samples/postgresql-advanced): 高级 PostgreSQL 数据库示例，包括优化策略、复杂查询、索引和性能调优

## 相关内容

- [SQL 查询性能与完整性审查](https://elysiatools.com/zh/hubs/sql-query-review-performance-and-integrity): 围绕查询构建、JOIN、格式化、性能计划、注入风险、外键完整性和 schema 差异，形成可审批的 SQL 审查证据。
