原文: 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项

原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server-auto-update-and-auto-create-statistics-options/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=2012913

统计信息是如何提高SQLServer查询性能的?统计直方图用作在查询执行计划中查询优化器的选择依据。如果一个查询谓词包含统计信息的列,那么查询优化器不需要预测该查询中影响行数,因此,查询优化器有足够的信息去创建执行计划。SQLServer创建执行计划有一下几种不同的方式:

  • 统计信息会在每个新创建的索引中自动创建统计信息。
  • 如果数据库中AUTO_CREATE_STATISTICS被设置为ON,SQLServer将会自动对查询中用到的,且没有索引的列自动创建统计信息。

AUTO_CREATE_STATISTICS选项:

当把该选项设为ON时,查询优化器会对在谓词中使用的到列,如果这些列的统计信息不可用,则会单独对每列创建统计信息。这些统计信息对创建一个查询计划非常必要。它们创建于那些现有统计对象中不存在直方图的列上,名字包括列名和对象ID的十六进制格式:_WA_Sys_<column_name>_<XXXX>。这些统计信息用于查询优化器决定使用何种优化后的执行计划。

可以通过以下语句启用自动统计信息创建功能:

ALTER  DATABASE[你的库名]

SET AUTO_CREATE_STATISTICS ON

Auto Update Statistics选项:

统计信息会在查询编译或者执行缓存执行计划前被检查。当在以下情况下,统计信息会被认为过期:

1、  在一个空表中有数据的改动。

2、  当统计信息创建时,表的行数只有500或以下,且后来统计对象中的引导列的更改次数大于500.

3、  当表的统计信息收集时,超过了500行,且统计对象的引导列后来更改次数超过500+表总行数的20%时。

4、  在Tempdb中的表,少于6行且最少有6行被更改。

更多的信息可以查看MSDN

可以使用一下语句来开启自动更新统计信息:

ALTER  DATABASE[你的库名]

SET AUTO_UPDATE_STATISTICS ON

过时的统计信息会引起大量的性能问题,所以建议开启自动更新。它的默认设置是ON。没有更新统计信息常见的影响是选择了次优的执行计划,然后性能下降。有时候,过期的统计信息可能比没有统计信息更加糟糕。

使用以下语句来开启异步更新统计信息:

ALTER  DATABASE[你的库名]

SET AUTO_UPDATE_STATISTICS_ASYNC ON

如果开启了这个选项,查询优化器将先执行一次查询,然后更新过期的统计信息。当你把这个选项设为OFF时,查询优化器将在编译查询之前更新过期统计信息。这个选项在OLTP环境下很有用,但在数据仓库中有负面影响。

如何关闭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

当使用数据库级别的禁用时,表、索引或者统计对象的设置将全部失效。

何时创建统计信息?

其中一个答案是当使用数据库引擎优化顾问(DTA)时建议创建。另外一个情况是当你查看执行计划是,出现丢失统计信息的警告(missing statistics warnings),如下图的黄色三角叹号:

可以使用SQLServer Profiler 去监控丢失列统计信息的事件,你也可以考虑当你的查询从子集或者查询谓词中包含关联列的那些列上创建统计信息。

创建统计信息的语句如下:

--Create statistics on all rows

CREATE STATISTICSstatistics_name   ONYourDBName.YourSchema.YourTable(YourColumn1,YourColumn2)

WITH FULLSCAN

--Create statistics using a random 10 percent sampling rate

CREATE STATISTICSstatistics_name   ONYourDBName.YourSchema.YourTable(YourColumn1,YourColumn2)

WITH SAMPLE 10PERCENT

何时更新统计信息?

如果你的查询执行得很慢,那么是时候更新统计信息了。并且建议当你插入大量数据到升序或者降序的列时,更新统计信息,因为在这种情况下,统计信息直方图将不包含新插入的值,同时,强烈建议在除索引维护(当你重建、整理碎片或者重组索引时,数据分布不会改变)外的维护工作之后更新统计信息。

如果数据库的数据更改频繁,建议最低限度每天更新一次统计信息。一般来说,在数据仓库中,可以降低更新统计信息的频率,当更新时,通常建议执行sp_updatestats存储过程来实现。

性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项相关推荐

  1. unity移动端性能优化技术整理(持续更新)

    目录 Overview 性能优化主要针对四大类问题 填充率 发热量 功耗比 瓶颈可能性的顺序 性能分析工具 性能测试方法 确定瓶颈 CPU瓶颈 GPU瓶颈 确定顶点瓶颈 确定片元瓶颈 确定带宽瓶颈 增 ...

  2. android apk 自动更新,Android自动更新APK

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 通过Service的方式(推荐使用JobService),在后台获取服务器的APK信息,然后下载到本地,通过调用系统安装 ...

  3. 自动生成文章的html,文章自动更新工具|自动生成文件|自动伪原创|文章自动插入关键词工具...

    概念网络发布一款自动更新文章的工具, 该套工具可用概念的文章站程序, 概念的发布站程序, 概念的企业站程序, 只要在服务器一直开着这个工具, 工具会更具配置文件的配置, 每天定时的更新网站的文章, 文 ...

  4. 计算机关闭的时候自动更新,win7自动更新关闭有什么影响_win7系统关闭自动更新的步骤-win7之家...

    在win7系统中,自带有自动更新功能,只要有新的更新发布,电脑就会在后台自动更新,但是自动更新的时候就会影响电脑运行速度,所以有用户就想要关闭自动更新功能,但是又不知道win7自动更新关闭有什么影响, ...

  5. html 自动更新报告,自动更新的数据报表,让你告别重复的日报、周报、月报

    关于企业各式各样报表制作的繁琐,相信报表制作者很有发言权,我们用一个模拟场景看看. 一.场景模拟 管理者:我想做一个库存情况分析,你看看有空的时候安排下. 报表制作者:好的. 过了几个小时...... ...

  6. 联想android系统怎么关闭自动更新,系统自动更新怎么关闭|关闭系统更新设置方法-系统城...

    2019-02-14 14:58:54 浏览量:2540 microsoft更新附带着很多其他的产品,而这些产品是用户们不需要的程序,系统经常会自动更新某些软件,非常烦人.针对这一问题,我们最好的办法 ...

  7. 性能优化工作笔记001---springcloud项目性能优化_工作经验随时更新

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1.能在内存中操作的,尽量内存中操作,比如,可以获取一次数据,对数据用代码进行,检索 而不是每次都 ...

  8. 解决window聚焦图片不自动更新,没有“喜欢么”信息提示框问题

    最近电脑不知道怎么了,window聚焦自动切换成图片,而且换成window聚焦,喜欢么等提示框也消失了,查了很多的方法,很杂,而且还有比修改注册表的,有个方法可用. 0.需要全程联网,因为需要重新加载 ...

  9. ubuntu 18.04自动更新后分辨率只剩下640x480选项

    update 2018/12/5 话不多说, 重装NVIDIA驱动: 1. Ctrl+Alt+F1进入命令行界面, 输入账号密码. 2. 卸载原有驱动(如果使用.run安装需要找到.run文件) #f ...

最新文章

  1. ps如何把自己的图与样机结合_激光整平机厂家如何给自己一个定位?
  2. 问题二:相关性怎么引入?
  3. mxGraph破解说明
  4. Eclipse插件开发中File和IFile的转换
  5. pytorch问题汇总
  6. java关闭io流_Java IO流关闭问题的深入研究
  7. 12月中国域名服务商Top20市场份额解析(图)
  8. springboot之websocket
  9. 页面中切换echarts主题
  10. python中exception类的_面试题 | 列举几个Python中的标准异常类?
  11. 更新 PORTS-Tree 且升级已安装的软件[zt]
  12. Modbus教程| Modbus协议,ASCII和RTU帧,Modbus工作
  13. 为什么python的命名不能以数字开头,Python模块名称以数字开头
  14. hibernate中antlr对于hql的词法分析源码解析
  15. java ee 设计模式解析与应用_Java EE 设计模式解析与应用_IT教程网
  16. ssm医院人事管理系统设计与实现 毕业设计源码111151
  17. 【xubuntu】 在xubuntu系统上开启自动登陆,并自动启动一个应用程序。
  18. AHBA| 如何建立Null模型控制富集分析中的假阳性偏差
  19. Nginx rewrite路由重写
  20. 【Vim】Vim使用笔记之四——Vim使用技巧

热门文章

  1. Python3 list 自定义比较函数
  2. js类数组转数组的方法(ArrayLike)
  3. 【leetcode】Balanced Binary Tree(middle)
  4. 分支-03. 三天打鱼两天晒网(Switch…case)
  5. Oracle VM VirtualBox 虚拟机中ubuntu里,鼠标滚轮不能使用
  6. 程序员伤不起的年龄——30岁
  7. 面临找工作,要记住给自己的这些话。
  8. 判断某个元素是否使用jquery绑定方法
  9. android datagrid demo
  10. ASP.Net Cookie(几个不同出处)