Navicat中需先选中SELECT/UPDATE/DELETE语句,Windows按Ctrl+Shift+E、macOS按Cmd+Shift+E打开EXPLAIN窗口;若报“No query specified”,常因多余分号、中间注释或含SET等不支持语句导致;type=ALL不必然慢,应右键开启“显示所有列”查看rows等关键指标。
Navicat 里怎么用快捷键打开 EXPLAIN 窗口
windows 和 macos 上默认快捷键不同,且容易被忽略的是:必须先选中一条 sql 语句(哪怕只选中 select 两个字母),否则快捷键无效。
- Windows:
Ctrl + Shift + E(不是Ctrl + E,后者是执行) - macOS:
Cmd + Shift + E - 如果没反应,检查是否在「查询编辑器」中、光标是否落在可执行的 SQL 区域内、语句是否以
SELECT/UPDATE/DELETE开头(Navicat 不支持对INSERT或 DDL 语句直接 EXPLAIN)
为什么点了 EXPLAIN 却报错 “No query specified”
这个错误不是数据库抛的,是 Navicat 自己的校验失败。它要求当前选中的文本能被识别为一条完整可解析的查询语句,但实际判断很粗糙。
- 常见触发场景:SQL 末尾多了一个分号
;(某些版本会误判为语句结束符后还有内容) - 注释写在语句中间,比如
SELECT /*+ USE_INDEX(t) */ id FROM t,部分 Navicat 版本(尤其是 15.x 早期)会因注释解析异常而丢弃主体 - 用了变量或客户端语法,如
SET @a = 1; SELECT @a;—— Navicat 只取第一条,但SET不支持 EXPLAIN,就报空查询 - 解决办法:删掉多余分号、把注释挪到开头或结尾、确保只选中纯 DML 语句段落
EXPLAIN 结果里 type=ALL 就一定慢?别急着优化
Navicat 调用的是 MySQL 原生 EXPLAIN,但显示方式做了简化,隐藏了 key_len、rows、filtered 等关键列,默认只展示基础字段。光看 type=ALL 容易误判。
- 如果表只有几百行,
type=ALL可能比走索引还快(磁盘顺序读比随机 IO 便宜) - 真正要看的是
rows值 —— 它代表预估扫描行数,这个值在 Navicat 的 EXPLAIN 窗口里默认不显示,得右键结果 →「显示所有列」才能看到 - 另外注意:Navicat 连接的是 MySQL 5.6+ 才支持
FORMAT=JSON,旧版本看不到used_columns或used_indexes这类诊断信息
Mac 上 Cmd+Shift+E 不生效?可能是系统级快捷键冲突
macOS 系统自带的「调度中心」默认也绑定 Cmd + Shift + E(显示桌面),会劫持掉 Navicat 的快捷键。
- 进「系统设置 → 键盘 → 快捷键 → 调度中心」,关掉「显示桌面」或改掉它的快捷键
- Navicat 自定义快捷键路径藏得深:「Navicat → 设置 → 工具 → 首选项 → 查询 → 快捷键」,但这里只能改「执行」和「格式化」,EXPLAIN 快捷键不可自定义(v16.0.14 仍如此)
- 如果用的是 M1/M2 芯片 Mac,确认 Navicat 是原生 ARM 版(非 Rosetta 模拟),否则键盘事件可能丢失
复杂点在于:Navicat 的 EXPLAIN 功能本质是拼接 SQL 后发给服务端,它不缓存执行计划,也不支持保存历史 plan 对比 —— 每次点都是实时查,所以网络延迟、连接状态、甚至 MySQL 的 query_cache_type 设置都可能影响你看到的结果。










