SQL Server统计信息
作者:网络转载 发布时间:[ 2013/4/10 9:57:43 ] 推荐标签:
创建和更新统计信息
查询的统计信息:
目前为止,已经介绍了选择索引、维护索引。如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化。当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况。
在创建索引的时候,SQLServer会在索引列上创建统计信息。简单来说,统计信息是索引或者列上能够描述数据分布的数据。
查询选择性:
公式:列上不重复数据的总数/列上的数据总数
选择性越高,索引性能越好,当上述公式的值为1时,可以用于做为主键或者键。
创建和更新统计信息:
统计信息有助于SQLServer优化引擎选择合适的索引及相关操作用于执行SELECT语句。有两个方式创建和更新统计信息:
1、手动创建和更新统计信息
2、自动创建和更新统计信息
准备工作:
在开始之前,先来看看如何查找数据库的当前统计信息设置:
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子句中的数据库或者表的统计信息情况:
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

sales@spasvo.com