首页/数据/SQL 速查/执行计划突变排查思路
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

执行计划突变排查思路

同一条 SQL 变慢但语句没改:先看计划是否变化,再查统计信息、数据分布与参数化因素。

SQL 速查数据更新于 2026-10-12

示例

示例
-- 对比计划:关注 rows 估算与实际差距
EXPLAIN ANALYZE SELECT ... ;

-- MySQL:更新统计并复看
ANALYZE TABLE orders;

-- PostgreSQL:同一语句不同参数的计划可能不同
EXPLAIN (ANALYZE) SELECT * FROM orders WHERE user_id = 100;  -- 选择性高的参数
EXPLAIN (ANALYZE) SELECT * FROM orders WHERE user_id = 1;    -- 选择性低的参数
-- 必要时评估 prepared 语句的计划复用策略(PG 的 plan_cache_mode)
常见原因统计过期、数据分布变化、新增索引改变代价、参数差异导致计划分化
临时手段提示与强制索引用于验证方向与应急
根治更新统计、调整索引结构、必要时固定语句形态

易错点

  • 把计划变化当偶发:多数突变有可解释原因(统计、分布、索引、参数),需要定位而非重启应付
  • 只在测试库复现:参数与数据分布不同会让计划完全不同,要用生产参数与统计复现

数据来源与参考

  • MySQL 8.0 Reference Manual · Optimizing Queries with EXPLAIN
  • PostgreSQL Documentation §14.1 Using EXPLAIN
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌