Navicat 不支持直接共享执行计划,因其为瞬态产物;需共享完整上下文:含实际参数的SQL、精确数据库版本、表结构与索引、统计信息、可视化截图及文本计划。

Navicat 本身不支持直接“共享执行计划”这个对象——执行计划是查询运行时的瞬态产物,无法像 .nmodel 或 BI 工作区那样导出为独立文件或生成 URI。但你可以通过共享「能复现该执行计划的完整上下文」,让团队成员在本地准确还原并分析它。
为什么不能直接导出或发送执行计划?
执行计划依赖三个强绑定要素:当前数据库版本与优化器行为、表的实际统计信息(ANALYZE 结果)、以及查询执行时的具体参数和会话设置(如 work_mem、enable_seqscan)。哪怕同一 SQL,在不同时间、不同服务器、甚至同一服务器上不同连接中,执行计划都可能变化。Navicat 的可视化执行计划(Visual Explain)只在查询执行瞬间生成,不持久化存储。
真正可共享的执行计划上下文有哪些?
要让同事复现并分析你的执行计划,必须打包以下内容:
- 原始 SQL(带实际参数值,而非占位符;例如用
WHERE order_id = 12345替代WHERE order_id = ?) - 目标数据库类型与精确版本(如
PostgreSQL 15.7、MySQL 8.0.33) - 表结构定义(
CREATE TABLE语句)及关键索引(CREATE INDEX) - 表的行数估算与统计信息更新时间(可查
pg_class.reltuples或SHOW TABLE STATUS) - Navicat 中截图的可视化执行计划图(含高亮耗时节点),并标注你关注的问题点(如红色“Seq Scan on orders”)
用 Navicat Premium 17 快速打包分享的实操步骤
在 Navicat Premium 17 中,最高效的方式是组合使用「固定查询结果」+「导出查询」+「截图」:
- 先执行带
EXPLAIN (ANALYZE, BUFFERS)(PostgreSQL)或EXPLAIN FORMAT=JSON(MySQL)的查询,确保勾选了Visual Explain标签页 - 点击查询结果右上角的
固定按钮,保留该次执行的完整结果(含文本计划、JSON、可视化图) - 右键该固定结果 →
导出查询→ 选择SQL 文件,它会自动包含原始语句 + EXPLAIN 命令 + 执行时间戳 - 对
Visual Explain图区域截图(注意包含左下角的数据库连接名和服务器版本) - 将导出的 SQL 文件、截图、以及一句说明(例如:“此计划中
Nested Loop导致 12s 延迟,请检查orders.customer_id是否缺失索引”)一并发给同事
容易被忽略的关键细节
很多人发完截图就以为完成了,但真正影响复现成功率的是这些:
- 没注明是否启用了
track_io_timing = on(PostgreSQL)或innodb_monitor_enable(MySQL),导致BUFFERS或 I/O 统计不可见 - 截图只截了可视化图,漏掉下方的文本计划——而某些关键提示(如
Rows Removed by Filter: 99999)只在文本中显示 - 共享的 SQL 里用了变量或用户自定义函数,但没同步提供函数定义,导致同事无法执行
- 误以为 Navicat Cloud 或 On-Prem Server 能同步执行计划——它们只同步查询语句、代码段、BI 工作区等静态对象,不存执行快照
执行计划不是一张快照,而是一份需要环境对齐的诊断报告。共享的本质,是帮对方省去“猜配置、补索引、试参数”的时间,而不是扔过去一个孤立的图。


















