SQL 优化从真实查询开始:先读执行计划再改写
SQL 调优别从背口诀开始。先选一条确实慢、调用频率明确的查询,保留参数和执行计划,再判断时间花在扫描、连接还是排序。
执行计划要结合实际参数
估算行数与实际行数差很大时,先检查统计信息和数据倾斜;扫描行数异常,再看过滤条件能否下推。只看 cost 值,很容易把优化方向带偏。
改写时守住结果语义
拆子查询、调整 join 顺序或增加索引前,先用固定数据比较结果集。NULL、重复键和时间边界是最容易被“优化掉”的细节。
- 记录数据库版本、参数与冷热缓存状态。
- 索引收益要连同写入成本评估。
- 分页查询检查排序键是否稳定。
一次只验证一个假设
如果认为瓶颈在排序,就先改变排序或索引;如果怀疑数据倾斜,就按 key 分布取样。多项改动一起上,最后很难解释是哪一项起作用。
好的 SQL 优化报告应该能回答三件事:原计划为什么慢、改动守住了什么语义、在什么条件下测得改善。