你的位置:首页 > 软件开发 > 数据库 > 理解统计信息(1/6):密度

理解统计信息(1/6):密度

发布时间:2015-05-21 12:00:53
在日常生活中,我们用统计信息来采取决定。SQL Server优化器也用同样的方式,使用统计信息来选择正确的执行计划。如果统计信息错误或过期,SQL Server可能就会选择错误的执行计划。在这个文章里,我们换个方式理解下统计信息。查询优化器使用统计信息来判断每一步返回的行。执行计 ...

理解统计信息(1/6):密度

在日常生活中,我们用统计信息来采取决定。SQL Server优化器也用同样的方式,使用统计信息来选择正确的执行计划。如果统计信息错误或过期,SQL Server可能就会选择错误的执行计划。在这个文章里,我们换个方式理解下统计信息。

查询优化器使用统计信息来判断每一步返回的行。执行计划里的估计行数信息是基于列的可用统计信息计算而来的。统计信息给我们列里数据分布情况。没有统计信息,查询优化器不呢个判断不同计划的效率。通过使用统计信息,查询优化器在访问数据时可以做出正确的选择。

在我们定义索引时,统计信息会自动创建。除此之外,当列在查询里被引用,作为WHERE条件的一部分,在group by子句里或join条件里,统计信息都会创建。为了自动创建统计信息,在数据库层里的AUTO_CREATE_STATISTICS 设置应该被启用。默认情况下这个设置是被启用的。除此之外,统计信息可以使用CREATE STATISTICS命令创建。

在SQL Server里存储的统计数字是关于密度和直方图(数据分布)的信息。在我们讨论更多细节前,先理解这2个概念。

密度:在给出列或一组列惟一值的比例。统计密度的公式:1/列(或一组列)不同值个数。

密度用来衡量列的唯一性或列的选择性。密度的值在0和1之间。如果这列的密度值为1,表示这列的所有记录值一样,选择性低。更高的密度带来更低的选择性。如果这列的密度值为0.003,表示这列有1/0.003=333个不同值。

我们来看个例子,用下列语句创建表并在上面建立2个索引。 

1 USE StatisticsDB2 GO3 4 SELECT * INTO SalesOrderDetail FROM AdventureWorks2008R2.Sales.SalesOrderDetail5 CREATE UNIQUE CLUSTERED INDEX ix_SalesOrderDetailID ON SalesOrderDetail(SalesOrderDetailID)6 CREATE NONCLUSTERED INDEX ix_productid ON SalesOrderDetail(productid)

原标题:理解统计信息(1/6):密度

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录