标准答案

  1. 统计信息描述表行数、索引基数和列值分布,优化器据此估算不同执行路径的成本。
  2. 大批量导入、删除、归档、分区切换或热点值变化后,旧统计可能不再代表真实数据。
  3. 错误估算会让优化器误以为某个条件很有选择性,或把大表放在不合适的 JOIN 驱动侧。
  4. 应结合数据库机制在合适窗口更新统计,并在变更后复查关键 SQL 的计划和耗时。
  5. 对于极端倾斜、相关列或参数敏感查询,可能还需要直方图、查询改写、分区或专用索引,而不是无限刷新统计。

题目解析

一个索引是否“存在”与优化器是否“应该使用”是两回事。若统计显示 status 值分布均匀,但实际 99% 都是 paid,优化器会对扫描行数作出错误预测,可能选择代价高得多的访问路径。

更新统计也不是无风险动作。它可能让一批查询切换到新计划,所以应识别核心 SQL、保留变更前后计划证据,并避免在业务高峰时做无验证的维护。

常见误区

  • 看到计划变慢就立即固定 Hint,长期掩盖数据分布变化和索引设计问题。
  • 只在表刚创建时收集一次统计,后续经历大规模数据变化也不维护。

作者信息