Navicat对SQL Server点击“解释”实际调用“显示实际执行计划”,通过SET STATISTICS XML ON获取XML并渲染图形化计划,需SHOWPLAN权限;默认为实际执行计划,含运行时统计与警告,UPDATE/DELETE会真实执行。
SQL Server 的“解释”按钮实际调用的是“显示实际执行计划”
navicat 对 sql server 并不发送 explain 命令(那不是 sql server 的语法),而是直接触发 ssms 风格的图形化执行计划 api。点击“解释”后,它会向 sql server 发送带有 set statistics xml on 的包装请求,并捕获返回的 xml 执行计划,再渲染成带运算符图标、箭头和成本百分比的可视化图。这个过程不需要你手动开 set statistics,也不依赖客户端是否安装 sql server management studio。
注意:必须有 SHOWPLAN 权限(sysadmin、db_owner 或显式授予),否则点“解释”会报错 Msg 262, Level 14, State 1: SHOWPLAN permission denied。
图形化计划里最该盯住的三个地方
SQL Server 的图形化执行计划不是看热闹的,重点在三处:
- 右上角的“查询成本(相对于批处理)”——如果超过 80%,说明这条语句吃掉了整批操作的大头,优先优化
- 带红色虚线框的运算符——Navicat 会高亮标出“缺少索引建议”,鼠标悬停能看到
CREATE INDEX语句,但注意:它只建议单列或简单组合,不考虑已有索引覆盖度,别直接全量执行 - 粗箭头连接的两个节点——箭头越粗,表示中间传递的行数越多;若左侧是
SELECT而箭头极粗,右侧却是Clustered Index Scan,基本就是全表扫描没走索引,得查WHERE条件是否失效
为什么点了“解释”却只看到文本,没有图?
常见原因就三个:
- SQL Server 版本太低:SQL Server 2005 及更早版本不支持图形化执行计划 XML 输出,Navicat 会自动回落为文本格式(
SET SHOWPLAN_TEXT ON) - 查询里含不支持的语法:比如
INSERT ... EXEC、分布式查询(OPENQUERY)、或引用了链接服务器的对象,SQL Server 会拒绝生成图形计划 - Navicat 版本低于 v16:老版本对 SQL Server 图形化支持不完整,v17+ 才稳定渲染所有运算符图标和内存/行数提示
验证方式:把同一条 SQL 粘贴进 SSMS,按 Ctrl+M 看能否出图——如果 SSMS 也不行,问题在 SQL 或服务端配置,不在 Navicat。
实际执行计划 vs 估计执行计划,Navicat 默认给你哪个?
Navicat 默认获取的是实际执行计划(actual execution plan),也就是真实跑一遍后返回的带运行时统计的 XML。这意味着:
-
Actual Rows和Estimated Rows会并列显示,差异大(比如预估 1 行、实际扫 10 万行)说明统计信息过期,该更新了 - 会出现
Warnings图标(黄色三角),比如“隐式转换导致索引失效”或“临时表溢出到磁盘”,这些在估计计划里看不到 - 代价更高:语句会被真实执行,如果原 SQL 是
UPDATE或DELETE,点“解释”就会真的改数据——所以务必确认你分析的是SELECT,或先用SET NOEXEC ON包一层
想切回估计计划?目前 Navicat 没提供开关,只能手动在查询开头加 SET STATISTICS XML OFF; SET SHOWPLAN_XML ON;,但这样 Navicat 就无法自动解析渲染,你会得到原始 XML 文本。


















