navicat点击“解释”即可直接查看执行计划,无需额外设置;它会根据数据库类型自动调用适配命令(如mysql的explain、oracle的explain plan等),并渲染结果,但需确保sql语法正确、权限充足且无未绑定参数。
navicat 里点“解释”就是开执行计划,不用额外设置
navicat 的执行计划功能是开箱即用的,不需要在偏好设置、连接配置或查询编辑器里手动开启开关。只要你连的是支持 explain(如 mysql)、explain plan for(如 oracle)或图形化执行计划接口(如 sql server、postgresql)的数据库,点击“解释”按钮就会自动调用对应命令并渲染结果。
常见错误现象:点了“运行”看到结果,却没注意右下角还有个“解释”标签页;或者误以为要先按 F6 进命令行再输 EXPLAIN ——其实完全没必要。
- “解释”按钮位置不固定:老版本在工具栏右侧,新版本(v17+)常藏在查询窗口底部标签栏,标着 解释 或 Explain
- 部分版本(尤其 macOS)把“解释”和“运行”做成左右并排按钮,容易点错成“运行”
- Oracle 用户要注意:必须先执行
EXPLAIN PLAN FOR ...,再查DBMS_XPLAN.DISPLAY;但 Navicat 会自动帮你补全这两步,你只管点“解释”
不同数据库的“解释”背后调用的命令不一样
Navicat 不是简单地加个 EXPLAIN 前缀就完事,它会根据当前连接的数据库类型,动态生成适配的底层命令。这意味着你看到的执行计划结构、字段含义、甚至是否带成本估算,都取决于后端引擎本身的能力。
- MySQL:自动发
EXPLAIN FORMAT=TRADITIONAL(或FORMAT=JSON,v15.5+ 默认),字段如type、key、rows直接对应优化器决策 - SQL Server:走图形化执行计划 API,能显示运算符图标、实际 vs 预估行数、内存授予等,比纯文本丰富得多
- PostgreSQL:默认用
EXPLAIN (ANALYZE, BUFFERS),但 Navicat v16+ 会限制ANALYZE(因会真实执行),改用EXPLAIN纯预估 - Oracle:调用
EXPLAIN PLAN FOR ...+SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY),不触发真实执行
为什么点了“解释”没反应?大概率是这三类问题
不是所有 SQL 都能成功生成执行计划。Navicat 会尝试解析,但失败时往往静默跳过,只留空面板或报错一闪而过。
- 语句不完整或语法错误:比如少了个
FROM,或用了当前数据库不支持的语法(如 MySQL 8.0 以下写WITHCTE) - 权限不足:MySQL 需要
PROCESS权限;Oracle 需要有PLAN_TABLE写入权限或已存在该表;SQL Server 要VIEW SERVER STATE - 语句含变量或参数未绑定:Navicat 在“解释”模式下不模拟参数值,遇到
WHERE id = ?或WHERE name = @p1会直接报错或返回空
解决办法很简单:先把 SQL 改成硬编码(如 WHERE id = 123),确认能出计划后再还原参数。
别依赖图形界面里的“执行时间”,它不等于真实耗时
Navicat 在“解释”结果页下方有时会显示“执行时间:0.002s”这类数字,但这只是数据库返回执行计划本身的耗时(毫秒级),不是你那条 SQL 真实跑完的时间。它和 EXPLAIN 命令的开销有关,和你的查询性能无关。
真正要看性能瓶颈,得盯住这些字段:
- MySQL 的
type字段:出现ALL(全表扫描)或index(全索引扫描)就得警惕 - SQL Server 图形计划里的红色警告图标:通常意味着缺失索引、隐式转换或临时表膨胀
- Oracle 的
COST列:数值越大不代表越慢,但同构语句间可横向对比
最容易被忽略的一点:Navicat 的“解释”默认不包含执行统计(如实际读取行数、IO 次数)。想看这些,得手动切到“运行”模式并勾选“包含执行统计”(SQL Server)或改用命令行加 ANALYZE(PostgreSQL)——图形界面在这里是简化版,不是替代品。










