在帮助优化器选择正确的执行计划,统计信息是一个重要因素。因此,我们在处理性能问题时,要足够重视统计信息。可能是对统计信息知识及其相关机制的缺乏,忽略统计信息往往是造成性能问题的根源。
查询优化器在每一步使用统计信息判断返回的行数。在执行计划里的预估行数信息是基于列上的可用统计信息计算而来的。统计信息会给我们列上数据分布信息。没有统计信息,查询优化器不能判断不同计划的效率。通过使用统计信息里的内容,查询优化器在访问数据的时候就可以做出正确选择。
在SQL Server里存储的统计信息包括密度和直方图:
- 密度向量:密度是给出列(或一组列)里唯一值的比率。理解统计信息(1/6):密度向量
- 直方图:直方图是统计信息里第一列的数据分布详情。理解统计信息(2/6):直方图
有2类统计信息,索引统计信息和列统计信息。在表上定义索引时,索引统计信息会自动创建。列统计信息总是在单列,当在查询里列被引用时,列统计信息会自动创建。为了自动创建列统计信息,在数据库属性里可以将自动创建统计信息设置为启用。在理解统计信息(3/6):谁创建和管理统计信息?在性能调优中,统计信息的作用里我们详细讨论了统计信息是如何创建的,自动更新和创建统计信息是如何工作的,过期的统计信息如何影响我们的性能。
在表里发生合理的变化后,SQL Server会自动更新统计信息。这里有个阀限值来触发自动更新统计信息。默认的阀值对最优性能是否足够好?我们真的需要通过人为更新统计信息来干预自动更新统计信息么?看看理解统计信息(4/6):自动更新统计信息的阀值——人为更新统计信息的重要性就知道答案了。
在SQL Server 2005和SQL Server 2008里,辨别统计信息是否需要人为更新是个很困难的事,理解统计信息(5/6):如何检测过期的统计信息可以给你一些如何开始的想法。
额外赠送统计信息内幕:直方图和密度向量。