1. 什么是统计信息
SQL Server 2005 允许创建有关列中值的分布情况的统计信息。查询优化器使用这些统计信息并通过估计使用索引评估查询的开销来确定最佳查询计划。
按照默认设置,如果表中的某列没有索引,则SQL Server会自动为该列创建统计。然后,查询优化器评估该列中数据分布范围的统计信息,以选择一个更为有效的查询处理方案。
创建统计信息后,数据库引擎 对列值(根据这些值创建统计信息)进行排序,并根据这些值(最多 200 个,按间隔分隔开)创建一个“直方图”。直方图指定有多少行精确匹配每个间隔值,有多少行在间隔范围内,以及间隔中值的密度大小或重复值的发生率。
2. 统计信息的作用
1)index建立后,优化器是否使用该index,优化器需要借助一些统计信息来做判断
2)根据统计信息,预估采用嵌套循环连接,合并连接, 哈希连接等哪一个连接
3)根据统计信息判断表的估计最佳的成本(最佳的执行顺序)
3. 统计信息的创建
如果列上创建了索引,会自动生成一个跟索引同名的统计信息;没有索引的列上,如果用它来关联表或者查询数据,这时,系统会在评估最佳查询计划前,生成一个该列的的统计信息,其前缀为_WA_Sys_。
4. 统计信息内容
显示指定表上的指定目标的当前分发统计信息.(用户必须是表所有者,或者是 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员。)
DBCC SHOW_STATISTICS ( 'table_name' | 'view_name' , target )
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
STAT_HEADER | DENSITY_VECTOR | HISTOGRAM
参数:
'table_name' | 'view_name'
是要显示其统计信息的表或索引视图的名称。表名和视图名称必须符合标识符规则。
target
是要显示其统计信息的对象名称(索引名称、统计信息名称或列名)。目标名称必须符合标识符规则。如果 target 是表的现有索引或统计信息的名称,则返回有关此目标的统计信息。如果 target 是现有列的名称,且此列中存在自动创建的统计内容,则返回有关该自动创建统计内容的信息。
NO_INFOMSGS
取消严重级别从 0 到 10 的所有信息性消息。
STAT_HEADER | DENSITY_VECTOR | HISTOGRAM [ , n ]
如果指定以上一个或多个选项,可限制该语句返回的结果集。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10640532/viewspace-515929/,如需转载,请注明出处,否则将追究法律责任。