SQL Server统计信息(1)——创建和更新统计信息

发表于:2013-4-07 13:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:黄钊吉    来源:51Testing软件测试网采编

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

sp_helpstats 'Sales.SalesOrderHeader'

  步骤:

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

 ALTER DATABASE AdventureWorks SET AUTO_CREATE_STATISTICS ON

  2、启用同步创建列上统计信息的选项,Auto_Create_Statistics,当执行一个查询一个精确数据量的数据时,优化引擎会在这个列上创建一个柱状图表。由SQLServer创建的统计信息以_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的。但是有时候不一定符合你的要求,此时可以使用手动更新计划:

ALTER DATABASE AdventureWorks SET AUTO_UPDATE_STATISTICS ON

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

ALTER DATABASE AdventureWorks SET AUTO_UPDATE_STATISTICS_ASYNC ON

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

 SELECT  is_auto_update_stats_async_on ,

        is_auto_create_stats_on ,

        is_auto_update_stats_on

FROM    sys.databases

WHERE   name = 'AdventureWorks'

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

--创建统计信息在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为了统计信息而生成的表。可以认为是一个显示对应列上统计信息最大和最小值范围的报表。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号