当前位置:首页 > 系统运维 > 正文内容

用SQL Server索引密度对行数进行评估

a8116255316年前 (2010-07-19)系统运维11

此文章主要向大家介绍的是正确使用SQL Server索引密度对行数(Estimating Rows Using the Index Statistics)来进行评估的实际操作步骤,以及对优化器是如何正确使用SQL Server索引密度来决定一个索引的效果的描述。

当在一个范围内查找一个索引值或者键中存在重复值时,SQL Server会使用直方图信息。考虑下面关于bigpubs2000数据库中的sales表中查询:

Sql代码

Select * from sales   Where title_id = 'BI2184'   Select * from sales  Where title_id = 'BI2184' 

因为在表中title_id中存在重复值,SQL Server使用关于title_id的直方图(参考Listing34.2)来估计匹配的行数。对于BI2184值,它将查看EQ_ROWS值,值为343.0。这表示在表中title_id值为BI2184的记录共有343行。

当一个查询参数(search argument)的精确匹配(exact match 即等号计算)在直方图中step没有发现时,SQL Server使用比查找值(search value)大的下一个step中的AVG_RANG_ROWS值。例如,SQL Server对查找值为‘BI2187’进行评估,它将会发现匹配值为270.0行。

对一个范围检索,SQL Server把检范围两端的RANG_ROW和EQ_ROWS相加。例如,利用Listing34.2中的直方图,假如查找参数为 where title_id <= 'BI2574',行数估计将是:

314 + 613 + 343 + 270 + 277,或者为1817。

当直方图不能使用时,SQL Server索引密度来估计匹配行数。对于等值查找的计算公式是直截了当的,例如:

Sql代码

Declare @tid varchar(6)   Select @tid = 'BI2574'   Select count(*) from sales where title_id = @tid   Declare @tid varchar(6)  Select @tid = 'BI2574' Select count(*) from sales where title_id = @tid  

行估计值等于指定键值的SQL Server索引密度(1.8621974E-3)乘以表中行数:

Sql代码

Select count(*) * 1.8621974E-3   From sales   Go   Select count(*) * 1.8621974E-3  From sales  Go  314.19925631500001   

假如一个查询的SARG为title_id 和stor_id,并且假如title_id的SARG是一个可在优化期间可评价的常量表达式,SQL Server会用title_id stor_id的索引密度和title_id的直方图来估计匹配的行数(对某些值来说,索引密度估计的值可能会大学直方图估计出来的值)。SQL Server 将会用二者中较小的值作为匹配的行数。

根据title_id stor_id的索引密度,你能看到:

Sql代码

Select coun(*) * 5.997505E-6   From sales   Select coun(*) * 5.997505E-6  From sales  1.011929031125   

在这个例子中,SQL Server将用title_id 和stor_id的SQL Server索引密度来估计匹配的值。在此情况下,它估计查询将返回一条匹配的行。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/22084.html

分享给朋友:

“用SQL Server索引密度对行数进行评估” 的相关文章

windows 7系统如何设置休眠时不断网以便继续完成下载

windows 7系统如何设置休眠时不断网以便继续完成下载

在Windows 7系统的默认设置中,当Windows 7系统处于休眠状态时,会同时断网的。如此一来,无论你正在使用迅雷还是快车等下载工具,同样可以在休眠状态下继续完成下载,最大限度做到从身边的小事开始支持环保。下面我们就详细介绍操作步骤,帮助Windows 7系统用户实现这一节能目标。 首先需要...

如何删除自带的不常用应用为windows 7减负

如何删除自带的不常用应用为windows 7减负

对于Windows 7系统来说,其默认安装的许多工具是我们很少使用或从来不用的,比如系统自带的扫雷、纸牌游戏等。删除此类长期不用的系统组件,不但可以让系统更清爽,更重要的是还可以提高系统的运行速度,特别是对于硬件配置相对较低的上网本来说,尤其如此。接下来,笔者就给大家介绍一下如何删除Windows...

windows 7系统重装后卡在正在启动Windows开机界面怎么办

windows 7系统重装后卡在正在启动Windows开机界面怎么办

重装系统是我们面对许多电脑问题时的终极方法,不过重装系统也不意味着就能将全部的问题都修复。一些用户在重装系统后开机时,电脑卡在“正在启动Windows”开机界面上了,这要怎么解决呢? Windows 7系统重装后卡在开机界面的解决方法: 一、首先可以看看该故障出现的原因是否是因为启动了acp...

windows 7系统怎么取消禁ping命令?

windows 7系统怎么取消禁ping命令?

当我在虚拟机的linux系统中ping本机的ip发现ping不通,而本机可以ping通虚拟机中的ip。应该是出于安全考虑吧,Windows 7默认在防火墙里禁止了。 1、查看主机ip 打开“开始”程序中的“附件”,找到“命令提示符”打开。输入命令:ipconfig,可以看到本机的ip是192.1...

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

解决方法: 其实处理这些使用流氓软件,需要将相关的.exe文件删除,使它不能再运行,或者直接清除这个服务本身,使计算机重启的时候,它不会再启动。比如Hijackthis扫描,在扫描日志中,一般会把非Windows系统的服务以023的方式列出来,如下面这段: O23 - ...

Ubuntu 14.04安装Wine以便使用Windows应用

Ubuntu 14.04安装Wine以便使用Windows应用

假如你想要在Ubuntu上使用Windows应用,就需要用到Wine了,除了支持Linux系统外,Wine还可运行于其他系统,是个非常使用的软件,下面小编就以Ubuntu 14.04为例,给大家介绍下Ubuntu 14.04安装Wine的步骤。 Ubuntu 14.04安装Wine的步骤 1...