您的位置:首页 > 其它

统计信息相关资料的总结(原创)

2008-06-08 21:52 357 查看
统计信息相关资料的总结(原创)

转载请著名出处(作者wenjun.shi)

注:以下是我的总结,有可能有部分结论非正确,希望能及时提出并纠正

1、 索引和统计信息的各自作用(个人结论)

 索引的作用是快速定位到所需的数据行,用于目录的方式管理。

 统计信息作用是在执行前事先判断记录的行数,用于确定执行计划。

 执行计划的好坏直接影响查询的效率。

2、 统计信息的产生方式

 建立索引时,自动生成(要求设置数据库属性—自动创建统计信息为True),创建过程:先建索引 后建统计信息

 直接创建统计信息

3、 重建索引或统计有可能会影响第一次查询效率(个人结论)

 当重建索引时同时也会重建立统计信息。

 SQL2005增强的统计信息加载框架:如今优化器将加载所有必须加载的统计信息,从而提高了优化的质量和性能。

 当一个查询首次被编译时,如果查询优化器需要一个特定的统计信息对象并且该对象存在,该统计信息对象将被更新如果统计信息对象已经过时。则统计信息在重新编译查询时被更新。如果执行计划所依赖的统计信息改变了,那么执行计划也将从缓存中移除。

小结:统计信息在改变后会从缓存中移除再重新加载。

4、 统计信息的抽样方式

 默认已FULLSCAN来抽样,也可以设置RESAMPLE

5、 T-SQL优化方案(更好的使用统计信息)

 避免在查询中使用局部变量,使用局部变量会使查询优化器猜测数据量大小。

i. 例:DECLARE @a1 int

ii. SELECT * FROM tb WHERE a1=@a1

 考虑限制使用多语句的TVFs和表变量

i. 多语句的表值函数(TVFs)没有统计信息。

ii. 可考虑用一张标准表或者临时表作为TVF运算结果的临时存储,或者作为表变量的替换。

 不可折叠表达式和内置的单值函数可能导致猜测

i. 如db_name(),SELECT * FROM tb WHERE db_name= db_name()

ii. 代替方式SET @db_name=db_name()

EXEC sp_executesql N'SELECT * FROM tb WHERE db_name= @db_name

N'@n nvarchar(255)', @db_name

 考虑对降序排序的键进行更频繁地统计信息收集

i. 键值降序排序的列,例如IDENTITY列或者表示现实生活中时间戳的datetime列,由于频繁地插入数据会导致表中的统计信息不准确,因为新插入的值都位于统计信息直方图之外。如果您的应用程序看似使用了不适当的查询计划为那些使用键值降序排序的列作为查询条件的查询,考虑使用批处理作业更频繁地更新这些列上的统计信息。多久运行一次批处理作业运行取决于您的应用程序。考虑每天或每周运行一次,如果您的应用需要,也可以更频繁。

 使用 WITH RECOMPILE 选项的存储过程

i. 如:CREATE PROCEDURE sp_test(@a int) WITH RECOMPILE

AS

BEGIN

SELECT * FROM tb WHERE a=@a

END

 避免在查询中使用参数值之前就在SP中修改存储过程的参数值

1、 如:CREATE PROCEDURE sp_test(@a int) WITH RECOMPILE

AS

BEGIN

IF @a>1

Set @a=1

SELECT * FROM tb WHERE a=@a

END

2、 改进方式:

CREATE PROCEDURE sp_test(@a int) WITH RECOMPILE

AS

BEGIN

IF @a>1

Set @a=1

EXEC sp_test1 @a

END

GO

CREATE PROCEDURE sp_test1(@a int) WITH RECOMPILE

AS

BEGIN

SELECT * FROM tb WHERE a=@a

END

6、 在包含多列查询条件的查询中使用多列统计信息

 要想使一个统计对象完全支持多列的查询条件,那么多列统计信息对象的列前缀必须包含查询条件中所有的列。例如在列(a,b,c)上创建的多列统计信息对象只能够部分地支持a=1 AND c=1的查询条件。SQL Server将使用直方图估算a=1的选择性但不会使用c的密度信息,因为查询条件中缺失了b。在(a,c)或者(a,c,b)上创建的多列统计信息将支持查询条件a=1 AND c=1,并且可以使用密度信息来提高选择性估算的准确性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: