统计信息为什么会影响执行计划?哪些情况需要收集直方图?
优化器依赖统计信息估算行数、选择率和代价。如果统计信息缺失、过期或不准,优化器可能选错索引、选错 JOIN 顺序,甚至把本应走索引的查询误判为全表扫描更优。
常见需要关注统计信息的场景包括:
- 表刚通过批量 INSERT、CTAS 导入大量数据;
- 数据分布发生明显变化;
- SQL 执行计划突然退化;
- 优化器估算行数与实际行数偏差较大。
对于数据倾斜严重的列,例如状态列中某个值占比极高,仅收集普通统计信息不够,需要收集直方图。直方图能让优化器更准确估算不同值的选择率,从而避免把低频值和高频值当成同样分布。