统计信息是如何提高SQLServer查询性能的?统计直方图用作在查询执行计划中查询优化器的选择依据。如果一个查询谓词包含统计信息的列,那么查询优化器不需要预测该查询中影响行数,因此,查询优化器有足够的信息去创建执行计划。SQLServer创建执行计划有一下几种不同的方式:
- 统计信息会在每个新创建的索引中自动创建统计信息。
- 如果数据库中AUTO_CREATE_STATISTICS被设置为ON,SQLServer将会自动对查询中用到的,且没有索引的列自动创建统计信息。
在非常特殊的情况下,你不得不禁用这个有用的特性,可以使用以下方式关闭:
1、 使用sp_autostats来在表、索引或者统计对象上显式并更改自动更新统计信息选项。
2、 在表级别中,可以使用NORECOMPUTEoption of the UPDATE STATISTICS命令。
3、 你也可以在CREATESTATISTICS命令中使用NORECOMPUTE选项,但之后需要删除并重建统计信息。
4、 在CREATE INDEX命令中使用STATISTICS_NORECOMPUTE。
5、 在数据库级别,可以使用以下命令来禁用:
ALTER DATABASE[你的库名] SET AUTO_UPDATE_STATISTICS OFF |
当使用数据库级别的禁用时,表、索引或者统计对象的设置将全部失效。
何时更新统计信息?
如果你的查询执行得很慢,那么是时候更新统计信息了。并且建议当你插入大量数据到升序或者降序的列时,更新统计信息,因为在这种情况下,统计信息直方图将不包含新插入的值,同时,强烈建议在除索引维护(当你重建、整理碎片或者重组索引时,数据分布不会改变)外的维护工作之后更新统计信息。
如果数据库的数据更改频繁,建议最低限度每天更新一次统计信息。一般来说,在数据仓库中,可以降低更新统计信息的频率,当更新时,通常建议执行sp_updatestats存储过程来实现。
转自:
http://blog.csdn.net/dba_huangzj/article/details/8041267
http://blog.csdn.net/column/details/sqlserverdba.html