
DBeaver 执行计划避坑指南3 步把 5 秒慢查询压到 0.1 秒【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver周五下午一条 JOIN 跑了 8 分钟DBA 在群里 你给我执行计划。别慌打开 DBeaver 的 SQL 编辑器选中查询点一下 Explain整棵执行计划的树就摆了出来——瓶颈藏在哪个节点一眼就能揪出来。先搞懂执行计划在说什么执行计划说白了就是数据库的施工图纸它不执行只告诉你打算怎么执行。你把一条 SQL 扔过去优化器会先盘算一套读取、连接、排序、聚合的步骤再照着干。DBeaver 做的事就是把这套步骤从干巴巴的文本里拉出来画成一棵树。读树有个口诀从根往下扫先找谁扫了最多数据再找谁被反复执行。就像看工厂流水线先看哪台机器堵住了再看它是不是卡在最关键的工序上。想看 DBeaver 是怎么把各家数据库五花八门的 EXPLAIN 输出统一成这一棵树的可以翻一下 执行计划的模型抽象。怎么在 DBeaver 里一键生成执行计划操作就三步全程鼠标连上目标库在 SQL 编辑器里写好查询选中最外层 SELECT或者直接 CtrlA 全选点工具栏上的 Explain解释计划按钮点完编辑器里就弹出执行计划视图节点能展开、折叠点任意一个能看到它的行数、成本、扫描方式。这个视图的渲染逻辑在 ExplainPlanViewer 里。点了没反应或者报错常见就三种SQL 有语法错误优化器根本没走到、当前账号没权限跑 EXPLAIN、或者这个库压根不支持。DBeaver 会在状态栏直接提示比如 Cant explain plan for command别在那干瞪眼。实战一条慢查询怎么从 5 秒压到 0.1 秒拿一条典型的报表查询开刀SELECT * FROM orders o JOIN order_items oi ON o.id oi.order_id WHERE o.create_time 2023-01-01 AND o.status PAID;生成执行计划一眼看出两处要命orders走的是全表扫描一百多万行全读进来order_items靠主键做嵌套循环连接但驱动表那边没索引等于每行都要硬扫。改法就是加索引把过滤和连接都喂上料CREATE INDEX idx_orders_ct_status ON orders (create_time, status); CREATE INDEX idx_items_order_id ON order_items (order_id);重新生成执行计划两张表都变成索引扫描耗时从 5 秒掉到 0.1 秒。瓶颈从来不在 SQL 写得多花哨而在数据库选没选对读法。MySQL 的 JSON 执行计划怎么读MySQL 的 EXPLAIN 有表格版和 JSON 版DBeaver 默认帮你走 JSON 那套因为信息更全——它把每一步的 cost、rows、attached_condition 都塞进去了。这套解析逻辑在 MySQL 的 JSON 计划解析器 里对应的是EXPLAIN FORMATJSON。节点看什么危险信号该咋办type / 扫描方式ALL全表扫描给过滤列加索引rows / 估算行数接近表总行数检查 WHERE 有没有被索引接住ExtraUsing filesort / Using temporary用索引消掉排序和临时表key / 用的索引None连接列没走索引补上其他库大同小异一句话点评PostgreSQL 的EXPLAIN ANALYZE能给出真实执行耗时比估算值更靠谱OceanBase 也走 JSONDBeaver 单独做了适配。字段名各家不太一样但谁扫得多、谁没走索引这个判断标准是通用的。拿走就能用慢查询先点 Explain别猜——看树找最大的扫描节点看到 ALL / None / Using filesort先想索引再想改写 SQL改完索引必须重新生成执行计划确认别信应该快了下次 DBA 再 你直接甩一张执行计划截图过去。有跑不通的库去社区 Issue 区翻翻是不是有人踩过同一个坑。【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考