Navicat 15 编辑表时内存暴涨源于全量加载整表数据(含BLOB/TEXT),不支持LIMIT截断或按需拉取;关闭自动保存查询和最近打开对象、复制替换连接可有效缓解,命令行查询才是处理大表的可靠方式。
Navicat 15 编辑表时内存暴涨,是因为它在后台全量加载整张表
不是卡顿、不是渲染慢,而是你右键“打开表”那一刻,navicat 就已把 select * 的全部结果(含 blob/text 字段)读进本地内存——哪怕你只打算改一行。它不支持 limit 隐式截断,也不做字段投影优化,更不会按需拉取。尤其当表有几十万行、带 json 或 base64 图片字段时,一个标签页就能吃掉 1.2gb+ 工作集内存。
关闭“自动保存查询”和“最近打开对象”能立刻释放几百 MB
这两个功能看似辅助,实为内存泄漏温床:
- “自动保存查询”默认存 1000 条历史,每条都缓存完整 SQL + 执行耗时 + 结果摘要(即使没点“查看结果”)
- “最近打开对象”列表若含大结果集标签页,关 tab 不等于释放内存;Navicat 会持续持有 ResultSet 引用,直到手动清空或重启
- 路径:工具 → 选项 → 环境 → 查询编辑器 → 自动保存查询数设为
100;同页下方“最近打开对象”也设为100
真正有效的临时缓解:复制连接后替换原连接
这是被长期验证最轻量的“内存重置”操作,原理是强制刷新连接上下文缓存:
- 右键目标连接 → “复制连接”
- 右键原连接 → “删除连接”(注意:不是断开,是彻底删掉)
- 右键空白处 → “粘贴连接”,再双击重命名回原名
- 重新连接后,之前累积的元数据映射、字段缓存、执行计划快照全部清空
该操作不改动任何数据库,但能立即将内存从 1.5GB 压回 400MB 左右——比重启 Navicat 更快,且保留所有书签和查询历史。
别信“开启流式查询”,Navicat 15 压根没有这个功能
所有教程里说的“勾选流式查询降低内存”,都是误传。Navicat 是封闭客户端,其 JDBC/ODBC 封装层未暴露 setFetchSize(Integer.MIN_VALUE) 或 streaming result set 控制入口。你看到的“每批记录数”只是事务提交粒度,不是流式:每一批仍需完整载入内存、校验、映射、生成 UI 行对象,中间无释放环节。真正要处理大表,请直接用命令行:mysql -u root -p database_name -e "SELECT id, name FROM t_user LIMIT 10000",结果不进 GUI 内存池。
最易被忽略的是:你以为只在“编辑表”时才吃内存?其实从你在查询构建器里拖拽第一个字段开始,Navicat 就已在后台缓存元信息树和列类型推导结果——这些引用不会随窗口关闭而回收。











