SQL 执行计划可视化器

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

本工具解析真实的 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,以便工具比较估算与实际。

示例结果

1 个示例

可视化存在行数估算偏差的 PostgreSQL EXPLAIN ANALYZE

Seq Scan 估算 1000 行而实际 95000 行,典型统计过期热点,并给出索引建议。

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 执行计划可视化器是一款专为数据库开发和运维人员设计的在线工具。它能够解析 PostgreSQL、MySQL 和 SQLite 的 EXPLAIN 或 EXPLAIN ANALYZE 输出,将其转化为直观的树状成本图,自动标注估算与实际行数的偏差热点,并针对全表扫描、临时表和慢查询提供具体的索引与 SQL 改写建议。

适用场景

  • 数据库查询变慢,需要分析 SQL 实际执行路径以找出性能瓶颈时。
  • 怀疑数据库统计信息过期,需要对比 EXPLAIN ANALYZE 中估算行数与实际行数的偏差时。
  • 面对复杂的嵌套循环或多表关联,难以通过原始文本直观理清执行计划的层级关系时。

工作原理

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

使用场景

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

用户案例

1. 诊断 PostgreSQL 统计信息过期导致的慢查询

后端开发工程师
背景原因
线上用户表 users 查询变慢,开发人员获取了 EXPLAIN (ANALYZE, FORMAT JSON) 的输出,发现查询没有走索引。
解决问题
难以直观判断是索引缺失还是优化器估算失误导致了全表扫描。
如何使用
将 PostgreSQL 的 EXPLAIN JSON 粘贴至输入框,选择方言为 PostgreSQL,点击生成可视化树。
示例配置
{
  "dialect": "postgresql",
  "maxDepth": 20
}
效果
可视化树将 Seq Scan 节点标红,并高亮显示估算行数(1000行)与实际行数(95000行)存在近百倍偏差,提示运行 ANALYZE users 更新统计信息,并建议在 email 列上创建索引。

2. 优化 MySQL 隐式类型转换导致的索引失效

数据库管理员 (DBA)
背景原因
业务系统升级后,一条根据订单号查询的 SQL 出现严重堆积,MySQL 的 EXPLAIN 显示为全表扫描。
解决问题
需要快速确认为什么已有的 idx_order_no 索引未被使用。
如何使用
粘贴 MySQL 的 EXPLAIN FORMAT=JSON 输出,输入对应的 SQL 查询,运行可视化分析。
示例配置
{
  "dialect": "mysql",
  "sql": "SELECT * FROM orders WHERE order_no = 123456"
}
效果
工具检测到 order_no 为字符类型,而查询使用了数字,诊断出非 Sargable 谓词(隐式类型转换),并给出“修改查询参数类型或改写 SQL”的优化建议。

用 Samples 测试

json, sql, text

相关专题

常见问题

支持哪些数据库的 EXPLAIN 格式?

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

什么是“统计热点”?

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

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

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

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

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

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

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

API 文档

请求端点

POST /zh/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

AI 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]