问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sqlserver 自动异步更新统计信息有什么用

发布网友 发布时间:2022-05-02 09:54

我来回答

2个回答

懂视网 时间:2022-05-02 14:15

在创建索引的时候,SQLServer就会在索引列上创建统计信息。简单来说,统计信息就是索引或者列上能够描述数据分布的数据。

 

查询选择性:

公式:列上不重复数据的总数/列上的数据总数

选择性越高,索引性能越好,当上述公式的值为1时,可以用于做为主键或者唯一键。

 

创建和更新统计信息:

统计信息有助于SQLServer优化引擎选择合适的索引及相关操作用于执行SELECT语句。有两个方式创建和更新统计信息:

1、  手动创建和更新统计信息

2、  自动创建和更新统计信息

 

准备工作:

在开始之前,先来看看如何查找数据库的当前统计信息设置:

[sql] view plain copy print?
  1. SELECT  CASE WHEN DATABASEPROPERTYEX(‘master‘, ‘IsAutoCreateStatistics‘) = 1  
  2.              THEN ‘Yes‘  
  3.              ELSE ‘No‘  
  4.         END AS ‘IsAutoCreateStatistics?‘ ,  
  5.         CASE WHEN DATABASEPROPERTYEX(‘Master‘, ‘IsAutoUpdateStatistics‘) = 1  
  6.              THEN ‘Yes‘  
  7.              ELSE ‘No‘  
  8.         END AS ‘IsAutoUpdateStatistics?‘ ,  
  9.         CASE WHEN DATABASEPROPERTYEX(‘Master‘, ‘Is_Auto_Update_stats_async_on‘) = 1  
  10.              THEN ‘Yes‘  
  11.              ELSE ‘No‘  
  12.         END AS ‘IsAutoUpdateStatsaAyncOn?‘  
  13. GO  
SELECT CASE WHEN DATABASEPROPERTYEX(‘master‘, ‘IsAutoCreateStatistics‘) = 1
  THEN ‘Yes‘
  ELSE ‘No‘
 END AS ‘IsAutoCreateStatistics?‘ ,
 CASE WHEN DATABASEPROPERTYEX(‘Master‘, ‘IsAutoUpdateStatistics‘) = 1
  THEN ‘Yes‘
  ELSE ‘No‘
 END AS ‘IsAutoUpdateStatistics?‘ ,
 CASE WHEN DATABASEPROPERTYEX(‘Master‘, ‘Is_Auto_Update_stats_async_on‘) = 1
  THEN ‘Yes‘
  ELSE ‘No‘
 END AS ‘IsAutoUpdateStatsaAyncOn?‘
GO

 

 

下面的语句用于显示where子句中的数据库或者表的统计信息情况:

 

[sql] view plain copy print?
  1. SELECT  object_id ,  
  2.   
  3.         OBJECT_NAME(object_id) AS TableName ,  
  4.   
  5.         name AS StatisticsName ,  
  6.   
  7.         auto_created  
  8.   
  9. FROM    sys.stats  
  10.   
  11. --where object_id=OBJECT_ID(‘Sales.SalesOrderHeader‘)  
  12.   
  13. ORDER BY object_id DESC   
  14.   
  15. GO  
SELECT object_id ,

 OBJECT_NAME(object_id) AS TableName ,

 name AS StatisticsName ,

 auto_created

FROM sys.stats

--where object_id=OBJECT_ID(‘Sales.SalesOrderHeader‘)

ORDER BY object_id DESC 

GO

 

 

 

还可以使用以下方式查看:

[sql] view plain copy print?
  1. sp_helpstats ‘Sales.SalesOrderHeader‘  
  2.    
sp_helpstats ‘Sales.SalesOrderHeader‘
 

 

 

步骤:

1、  现在开始来看看创建和更新统计信息的不同方式,在数据库级别,有一个选项,默认为ON,这个选项是:Auto_Create_Statistics:

[sql] view plain copy print?
  1. ALTER DATABASE AdventureWorks SET AUTO_CREATE_STATISTICS ON  
 ALTER DATABASE AdventureWorks SET AUTO_CREATE_STATISTICS ON
 

 

2、  启用同步创建列上统计信息的选项,Auto_Create_Statistics,当执行一个查询一个精确数据量的数据时,优化引擎会在这个列上创建一个柱状图表。由SQLServer创建的统计信息以_WA开头,可以看看这些列表:

 

[sql] view plain copy print?
  1. SELECT  st.name AS StatName ,  
  2.   
  3.         COL_NAME(stc.object_id, stc.column_id) AS ColumnName ,  
  4.   
  5.         OBJECT_NAME(st.object_id) AS TableName  
  6.   
  7. FROM    sys.stats AS st  
  8.   
  9.         INNER JOIN sys.stats_columns AS stc ON st.object_id = stc.object_id  
  10.   
  11.                                                AND st.stats_id = stc.stats_id  
  12.   
  13. WHERE   st.name LIKE ‘_WA%‘  
SELECT st.name AS StatName ,

 COL_NAME(stc.object_id, stc.column_id) AS ColumnName ,

 OBJECT_NAME(st.object_id) AS TableName

FROM sys.stats AS st

 INNER JOIN sys.stats_columns AS stc ON st.object_id = stc.object_id

      AND st.stats_id = stc.stats_id

WHERE st.name LIKE ‘_WA%‘

 

 

3、  上面的统计信息不会因为Auto_Create_Statistics选项设为ON而结束。这些是强制你的统计信息更新以保证性能优秀。这个只是定义你的统计信息是否同步更新。默认情况下这个选项是为ON的。但是有时候不一定符合你的要求,此时可以使用手动更新计划:

[sql] view plain copy print?
  1. ALTER DATABASE AdventureWorks SET AUTO_UPDATE_STATISTICS ON  
ALTER DATABASE AdventureWorks SET AUTO_UPDATE_STATISTICS ON

 

4、  Auto_Update_Statistics选项会在创建索引时、通过Auto_Create_Statistics或者用户使用CREATE STATISTICS命令手动创建统计信息时自动更新统计信息,下面命令使用异步方式更新统计信息:

[sql] view plain copy print?
  1. ALTER DATABASE AdventureWorks SET AUTO_UPDATE_STATISTICS_ASYNC ON  
ALTER DATABASE AdventureWorks SET AUTO_UPDATE_STATISTICS_ASYNC ON

 

5、  此时来看看执行上面语句后的数据库统计信息配置情况:

 

[sql] view plain copy print?
  1.  SELECT  is_auto_update_stats_async_on ,  
  2.   
  3.         is_auto_create_stats_on ,  
  4.   
  5.         is_auto_update_stats_on  
  6.   
  7. FROM    sys.databases  
  8.   
  9. WHERE   name = ‘AdventureWorks‘  
  10.    
 SELECT is_auto_update_stats_async_on ,

 is_auto_create_stats_on ,

 is_auto_update_stats_on

FROM sys.databases

WHERE name = ‘AdventureWorks‘
 

 

6、  上面的方式均为自动创建和更新统计信息,现在来看看如何手动实现:

[sql] view plain copy print?
  1. --创建统计信息在Sales.SalesOrderHeader表的DueDate列上  
  2.   
  3. CREATE STATISTICS st_DueDate_SalesOrderHeader ON Sales.SalesOrderHeader(DueDate)  
  4.   
  5. GO  
  6.   
  7. --更新Sales.SalesOrderHeader表的全部统计信息  
  8.   
  9. UPDATE STATISTICS Sales.SalesOrderHeader  
  10.   
  11. GO  
  12.   
  13.    
  14.   
  15. --更新Sales.SalesOrderHeader表的st_DueDate_SalesOrderHeader统计信息  
  16.   
  17. UPDATE STATISTICS Sales.SalesOrderHeader st_DueDate_SalesOrderHeader  
  18.   
  19. GO  
  20.   
  21.    
  22.   
  23. --更新数据库中所有可用的统计信息  
  24.   
  25. EXEC sys.sp_updatestats  
  26.   
  27. GO  
  28.   
  29. --手动删除统计信息  
  30.   
  31. DROP STATISTICS Sales.SalesOrderHeader.st_DueDate_SalesOrderHeader  
  32.   
  33. GO  
--创建统计信息在Sales.SalesOrderHeader表的DueDate列上

CREATE STATISTICS st_DueDate_SalesOrderHeader ON Sales.SalesOrderHeader(DueDate)

GO

--更新Sales.SalesOrderHeader表的全部统计信息

UPDATE STATISTICS Sales.SalesOrderHeader

GO

 

--更新Sales.SalesOrderHeader表的st_DueDate_SalesOrderHeader统计信息

UPDATE STATISTICS Sales.SalesOrderHeader st_DueDate_SalesOrderHeader

GO

 

--更新数据库中所有可用的统计信息

EXEC sys.sp_updatestats

GO

--手动删除统计信息

DROP STATISTICS Sales.SalesOrderHeader.st_DueDate_SalesOrderHeader

GO

 

分析:

当索引创建时,优化器会创建统计信息到索引列所在的表或者视图上,除此之外,如果对Auto_Create_Statistics选项设置了ON,优化器会创建一个单列统计信息,及时它没有出现在查询的所需列上。如果你觉得一些查询性能有问题,检查所有谓词,如果这些列缺失了统计信息,你可以手动增加,有时候,DTA(数据库优化顾问)也会建议你创建统计信息。

一般情况下,在查询编译之前,如果开启了同步更新统计信息,SQLServer如果发现统计信息过时,会引发更新统计信息的操作,然后你的查询就会使用上实时的统计信息。而这个操作会阻塞查询,知道更新结束,但是不会保留这些查询,它会更新统计信息以便下次运行查询的时候可以使用上较新的统计信息。

 

扩充知识:

默认情况下,只有sysadmin/db_owner/对象的创建者这三种角色的成员才有权限创建和更新统计信息。

 

柱状图:

柱状图是一类由SQLServer为了统计信息而生成的表。可以认为是一个显示对应列上统计信息最大和最小值范围的报表。

第十二章——SQLServer统计信息(1)——创建和更新统计信息

标签:启用   order by   权限   column   http   命令   title   like   列表   

热心网友 时间:2022-05-02 11:23

首先是针对全文检索,新版建立 Catalog 内容时,扩展(Index
population)的速度较旧版快一倍以上,而查询效率也提升
30%-50%。
另外,全文检索服务支持多实例(multi-instanced)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iPhone XR电量百分比怎么设置 Django如何使用网页嵌套网页(2023年最新解答) 社保之前工作缴了 后面工作不缴。自己要怎么续上?自己缴要缴多少?每... 壁挂炉数字不亮了怎么回事了解壁挂炉数字不亮的原因及解决方法_百度知 ... 单反长镜头和短镜头什么区别 ai的剪切蒙版快捷键是什么 自学当程序员需要哪些基础 程序员,需要学什么课程 想当一名出色的程序员数学必须要很好吗 华为路由器192.168.1.1怎样设置? 快递柜可以到付的吗?就是快递员把我的快递放在柜里,我取件的时候有界面扫码付运费,有这样的模式吗? 走快递到付怎么操作 海参池塘有害藻类导致水浑用什么可以清水 买回来的牛肉干没封好口,干的发酥没有嚼劲了怎么办? 被人盗号如何找回来? QQ被盗号 怎么找回? 被盗号要怎么拿回来啊? 写给女儿鼓励和以后改正的作文 如何将被盗号再盗回来 给女儿的一封信 刘墉 向年轻人讲道理的文章不少,本文却耐读易接受,原因是什么? 能把号盗回来吗? 被别人盗号了 猫出现应激反应已经一周不吃不喝了,该怎么办 怎样可以处理猫咪的应激反应呢? 如何可以解决猫咪应激反应? 猫严重应激反应能救回来吗 猫咪受到惊吓之后,该怎么办呢? 如何缓解猫的应激反应 醉驾酒精度100检察院会判刑多久没有什么交通事故 猫咪应激反应症状怎么缓解 猫咪应激反应怎么安抚 怎么从该股票代码看懂股票所属板块 信用卡欠五千还款怎么还 透支卡透了五千然后每个月怎么还款 建行信用卡透支了五千怎样还款 信用卡透支五千半年了每月最少还多少 交通银行信用卡欠款五千每月还最低还款额多少? 信用卡欠款五千块分期6个月每个月还多少? 信用卡不同时间透支如何还款 卖打包带、打包机、胶带、缠绕膜,的门市部怎么取名 农行信用卡透支5000,分6期,每月还多少 我朋友说,枸杞和荔枝泡茶喝是清目的。真的吗? 我的信用卡可以透支五千,两年没有还完,只是每个月还最低还款,现在全部还完要还多少? 广发信用卡消费五千分六个月还每个月应该还多少 交通银行信用卡,透支五千元六年没还,现在要还不知道得还多少钱,滞纳金是多少 杓杞与栛枝可以同时泡茶吗 十三香王守义活多少岁? 用信用卡一次花掉五千怎么还没有利息 荔枝能和枸杞一起吃吗? 信用卡欠了五千多块,没钱还怎么办 荔枝能与枸杞同食吗?