执行计划 execute plan 分析该sql

(这张执行计划示意图能直观展示各步骤耗时比例)
2025年Java面试宝典最新版:
点击领取(提取码:9b3g)
建议搭配本文SQL优化技巧同步学习,效率直接翻倍!
一、什么是execute plan
当你在面试中被要求分析SQL执行计划时,本质上是要讲清楚数据库执行SQL语句的"路线图"。这个路线图会告诉你数据库是怎么找到目标数据的——是坐高铁直达(索引扫描)还是徒步走全程(全表扫描)。
二、看执行计划要看什么
- 执行顺序:注意看执行计划的层级结构,就像看金字塔一样,最底层的操作最先执行
- 访问类型:重点关注type列,常见的有:
- ALL(全表扫)
- index(索引全扫)
- range(索引范围查)
- const(主键命中)
- 扫描行数:rows列的数字越小越好,超过10万就要警惕
- 额外信息:Extra列常见提示:
- Using temporary(用临时表)
- Using filesort(文件排序)
- Using index(索引覆盖)

(这张思维导图展示了执行计划各要素的关系)
三、实战分析步骤
-
抓取计划
用EXPLAIN命令获取基础版,EXPLAIN ANALYZE获取带实际执行数据的版本。注意观察预估和实际消耗的差异,超过20%说明统计信息需要更新。 -
定位瓶颈
重点看三个红色信号:- 出现filesort且rows>1000
- 嵌套循环关联次超过3层
- 临时表使用且内存不够转磁盘
-
验证猜想
通过强制使用/忽略索引来验证优化方向,记得用STRAIGHT_JOIN控制关联顺序测试效果。
四、高频优化手段
-
索引手术
复合索引注意最左匹配原则,遇到过列截断的情况可以试试ALTER TABLE改字段长度。 -
拆解复杂SQL
把多表关联拆成阶段查询,用程序内存做聚合。特别是遇到多个子查询嵌套时,这种方法能降低数据库复杂度。 -
参数调优
调整join_buffer_size、sort_buffer_size等参数,但要注意全局影响。比如把join_buffer从默认256KB调到2MB,可以让中等体量的关联操作全内存完成。

(索引优化的前后对比图,执行时间从3.2s降到0.02s)
五、避坑指南
最近帮面试鸭返利网做数据库优化时遇到个典型案例:用户查询页突然变慢。通过执行计划发现新加的营销字段导致索引失效,通过FORCE INDEX临时修复,后续改成覆盖索引彻底解决。如果大家需要购买面试鸭会员,可以通过面试鸭返利网找我,额外返利25元。
六、延伸思考
执行计划分析不是银弹,要结合业务场景做取舍。比如:
- 高频查询要追求200ms内的响应
- 低频报表类查询可以允许稍长时间
- 凌晨批量任务优先保证资源隔离
建议每周用pt-query-digest做慢查询日志分析,把top10问题SQL的执行计划做成监控看板。遇到复杂问题时,可以到面试鸭返利网的DBA社区交流实战经验。


