SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)...

 

本文出处:http://www.cnblogs.com/wy123/p/6008477.html 

  关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里。
  今天来写一下统计信息对于复合索引在预估时候的计算方法和潜在问题。
  本文原形来自于是个实际业务问题,某SQL在利用一个符合索引做查询的时候,发现始终会出现预估误差较大的情况,
  而改变复合索引的列顺序,这个预估行数的误差会发生变化,
  也就是说,Create index idx_index1 ON TableName(col1,col2)与Create index idx_index2 on TableName(col2,col1)
  用完全一样的的查询条件做查询,两个索引的执行计划对其预估的行数是不一样的
  究其原因在哪里呢?

  

  先造一个测试环境:

CREATE TABLE TestStatistics
(COL1 INT IDENTITY(1,1)  ,COL2 INT                ,COL3 DATETIME           ,COL4 VARCHAR(50)            
)
GOINSERT INTO TestStatistics VALUES (RAND()*10,CAST(GETDATE()-RAND()*300 AS date),NEWID())
GO 1000000

 

 问题重现

首先看一个非常有意思的问题,
在同一张表上,
先这么建一个索引:CREATE INDEX IDX_COL2_COL3 ON TestStatistics(COL2,COL3)
执行一个查询,预估为4127.86
然后DROP掉上面的索引,继续创建一个索引:CREATE INDEX IDX_COL3_COL2 ON TestStatistics(COL3,COL2)
注意COL2和COL3的顺序不一致
继续执行上面的查询(查询条件不变,数据不变,仅仅是索引列顺序发生了变化),这一次预估为2414.91

 

查询条件一样,数据也一样,为什么改变复合索引列顺序会影响到执行计划对数据行的预估呢?

 

 

 

 

首先来看第一个索引时候的预估算法:

  这个查询他预估为4127.86行,如下图

 

  说起来预估,就离不开统计信息,首先来看IDX_COL2_COL3这个索引的统计信息,
  我们知道,对于复合索引,统计信息中只有前导列的统计数据,也就是说IDX_COL3_COL2这个索引只有COL2这个列的统计信息,如下截图
  对于COL2=2的统计信息,统计为100336行,我们记住这个数字

 

 

  统计信息的另外一个特点就是在会在查询列(非索引列)上自动创建统计信息,如下截图
  查询执行过程中,自动创建了一个名字为:_WA_Sys_00000003_24E8431A的统计信息
  这个统计信息就是对COL3列的统计,可以发现在大于等于2012-10-20之后的统计行数


  在SQL Server 2012中,对数据行的预估计算方式是各个字段的选择性的乘积,
  假如Pn代表不同字段的密度,那么预估行数的计算方法就是: 预估行数=p0*p1*p2*p3……*RowCount
  可以利用这个算法,计算目前数据下,预估出来的结果:4217.86,跟执行计划预估是一致的,非常完美!

 

 

 

    当删除了IDX_COL2_COL3重建建立顺序为COL3+COL2的索引的时候,预估如下

   与上面同样的查询条件,预估为2414.91行

 

   

  依据上面的分析步骤,首先来分析索引列上的统计信息,如下截图为大于等于2016-10-20之后的预估行数

 

 

同理,本次查询也会自动建立COL2列上的统计信息(IDX_COL2_COL3索引被删除),观察这个统计信息对COL2=2的预估为83711.36行

   

   同样我们利用上述公式,来计算预估的行数:2414.9035行,也非常完美地吻合和执行计划预估的结果

   

 

  至此,应该很清楚一开始的问题了,就是为什么复合索引列顺序不一致,在查询的时候导致预估也不一致的原因。
  最根本的原因有就是:
  符合索引上只有前导列的统计信息,查询引擎会根据需要自动创建非前导列的统计信息,
  但是,非常关键一点,如果细心的话,你会发现查询引擎自动创建的统计信息的取样行数都不是100%取样的,这一点非常关键
  正是因为非前导列取样有一定的误差,导致在预估算法的时候,也即 预估行数=p0*p1*p2*p3……*RowCount的时候,密度值是不一样的
  也即在创建IDX_COL2_COL3的时候,统计出来的COL2密度为P1_1,COL3密度为P2_1
  创建IDX_COL3_COL2的时候,统计出来的COL2密度为P1_2,COL3密度为P2_2,因为P1_1<>P1_2,P2_1<>P2_2
  因此,计算出的结果就是P1_1*P2_1<>P2_1*P2_2,原理很简单,希望看官能明白。

  

 

  照这么计算,对于两个顺序不同的统计信息,如果P1_1=P2_1并且P2_1=P2_2,那么乘积就是一样的,预估行数也就是一样的,那么是不是呢?

  


  对于不同顺序的两个索引,先看COL2,COL3顺序的索引
  在查询一次之后(建立了统计信息),执行一个百分之百取样(WITH FULLSCAN)的统计信息更新
  重新来看其预估行数,这一次预估为:2894.49

  

 

 

   删除COL2,COL3顺序的索引,建立COL3,COL2为顺序的索引
  在查询一次之后(建立了统计信息),执行一个百分之百取样(WITH FULLSCAN)的统计信息更新
  重新来看其预估行数,这一次预估为:同样为2894.49,是吻合上述算法

 

 

 

 总结:

  文本简单演示了执行计划利用统计信息预估的算法和原理,以及在计算预估行数时候可能受到的干扰因素,
  这就要求我们在建立索引的时候,不仅仅是说我建一个复合索引就完事了,也要注意其索引列的顺序对执行计划预估的影响,
  更重要的是,要注意查询引擎自动生成的统计信息对预估的影响程度。

  抛开统计信息谈索引的,都是耍流氓。抛开统计信息取样百分比谈统计信息的,也是耍流氓。

  

  引申出来另外一个问题:维护统计信息的时候,能只更新索引列的统计信息,忽略非索引列的统计信息吗?

 

本人技术能力还很菜,写的不对的地方还请各位看官指出,谢谢。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哈密顿路径_检查图形是否为哈密顿量(哈密顿路径)

哈密顿路径Problem Statement: 问题陈述&#xff1a; Given a graph G. you have to find out that that graph is Hamiltonian or not. 给定图G。 您必须找出该图是否为哈密顿量 。 Example: 例&#xff1a; Input: 输入&#xff1a; Output: 1 输出1 Because here is a …

京东自动下单软件_黄牛软件自动下单秒杀商品 警方用科技手段打击

法制日报全媒体记者 张维定了10个闹钟,也抢不到一瓶茅台&#xff1b;等了很久的iPhone新手机,打开网页就秒没……或许并不是因为你的手速、网速慢,而是黄牛党在用软件和你抢商品。近日,在“净网2019”专项行动中,阿里安全协助江苏省南通市公安局成功打掉了一个制作销售黄牛软件…

河南招教考试计算机专业知识,河南教师招聘考试《计算机网络技术基础》知识点归纳七...

河南教师招聘考试《计算机网络技术基础》知识点归纳七1.ADSL是非对称数字用户线路&#xff0c;其下行速率为1.5&#xff5e;8 Mb/s&#xff0c;而上行速率则为16&#xff5e;640 kb/s。在一对铜双绞线上的传送距离可达5km左右&#xff0c;可同时上网打电话&#xff0c;互不影响…

content属性的4种用途

content属性浏览器支持情况&#xff0c;兼容到IE8浏览器&#xff0c;IE7及以下不支持用途一、配合:before及:after伪元素插入文本<div><p>伪元素</p> </div>p:before{content:CSS3;color:#4bb;font-weight:bold;margin-right:20px;background:#f0f0f0;…

内蒙古师范大学计算机科学技术学院,内蒙古师范大学计算机科学技术硕士生导师——李成城...

李成城&#xff0c;教授&#xff0c;硕导&#xff0c;1971年7月出生于内蒙古呼伦贝尔盟。2002年9月-2005年7月在北京邮电大学信息工程学院学习&#xff0c;获得工学博士学位&#xff0c;主要研究领域是&#xff1a;自然语言理解、机器学习、图像识别。1993年在内蒙古师范大学计…

超清世界地图可放大_3D高清世界地图

查看世界地图的工具有哪些可以提供呢&#xff1f;3D世界地图官方版是简单好用的世界地图工具&#xff0c;可以看到地球的大概模样&#xff0c;选择不一样的海洋能看到不一样的事物&#xff0c;这也是一款3d世界地图高清地图&#xff0c;需要用地图软件的可以下载。3D世界地图官…

工欲善其事必先利其器(一)

2019独角兽企业重金招聘Python工程师标准>>> 写在前面的话&#xff1a;纸上得来终学浅&#xff0c;绝知此事要躬行。还是自己敲一遍记得牢。 下载和安装 Emmet为大部分流行的编辑器都提供了安装插件&#xff0c;下面是它们的下载链接&#xff1a; Sublime Text Ecli…

windows 2008r2文件服务器部分用户访问不了_苹果设备如何访问 Windows 文件共享?...

前几天写了一篇关于 Mac 文件共享的。今天继续聊聊 Mac、iPad 和 iPhone 如何访问 Windows 的文件共享。Windows 开启文件共享Windows 搜索并打开「高级共享设置」。在「专用」勾选「启用网络发现」和「启用文件和打印机共享」。然后选择一个 Windows 上想要共享的位置&#xf…

微信小程序简单入门1

参考文档&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/index.html1 创建项目开发者工具安装完成后&#xff0c;打开并使用微信扫码登录。选择创建“项目”&#xff0c;填入上文获取到的 AppID &#xff0c;&#xff08;无appid直接选择&#xff09;设置一个本地项目…

leetcode数组汇总_LeetCode刷题实战118:杨辉三角

算法的重要性&#xff0c;我就不多说了吧&#xff0c;想去大厂&#xff0c;就必须要经过基础知识和业务逻辑面试算法面试。所以&#xff0c;为了提高大家的算法能力&#xff0c;这个公众号后续每天带大家做一道算法题&#xff0c;题目就从LeetCode上面选 &#xff01;今天和大家…

多线程下不能用truncate吗_那么多的化妆品,怀孕后都不能用了吗?

前几天圆梦参加了青岛的美博会&#xff0c;里面的化妆品真多啊&#xff0c;无论是护肤、美白、彩妆比比皆是&#xff0c;看的人眼&#xff08;liu&#xff09;花&#xff08;lian&#xff09;缭&#xff08;wang&#xff09;乱&#xff08;fan&#xff09;。虽说国务院宣布的新…

手机html5性能测试工具,HTML5模块 性能方面8大测试环节_小米 M3_手机硬件频道-中关村在线...

Vellamo作为一款专攻网页浏览性能测试的工具&#xff0c;在这方面的测试环节也相对复杂很多。这一部分在Vellamo的HTML5测试环节中通过14项测试来进行体现&#xff0c;而接下来我们会对着实际个测试项进行相应的介绍。See The Sun Canvas/Pixel Blender测试界面See The Sun Can…

[计算机网络]httpserver--如何解析HTTP请求报文

这个http server的实现源代码我放在了我的github上&#xff0c;有兴趣的话可以点击查看哦。 在上一篇文章中&#xff0c;讲述了如何编写一个最简单的server&#xff0c;但该程序只是接受到请求之后马上返回响应&#xff0c;实在不能更简单。在正常的开发中&#xff0c;应该根据…

英特尔核芯显卡控制面板没有了_核显和独显、集成显卡有什么区别

集成显卡&#xff1a;一般不带有显存&#xff0c;而是使用系统的一部分主内bai存作为显存&#xff0c;具体的数量一般是系统根据需要自动动态调整的。显然&#xff0c;如果使用集成显卡运行需要大量占用内存的空间&#xff0c;对整个系统的影响会比较明显&#xff0c;此外系统内…

徐州初中计算机学校排名2015,徐州初中学校排名,徐州重点初中排名详细榜单

2018年徐州初中学校排名,徐州重点初中排名详细榜单孩子小升初&#xff0c;几乎所有的家长都会陷入纠结&#xff0c;都想为孩子选择一所“好学校”&#xff0c;在择校过程中&#xff0c;家长们总想知道徐州初中学校排名以及徐州重点初中排名详细榜单&#xff0c;但这里小编提醒一…

分布式计算 MapReduce与yarn工作机制

一、第一代hadoop组成与结构第一代Hadoop&#xff0c;由分布式存储系统HDFS和分布式计算框架MapReduce组成&#xff0c;其中&#xff0c;HDFS由一个NameNode和多个DataNode组成&#xff0c;MapReduce由一个JobTracker和多个TaskTracker组成&#xff0c;对应Hadoop版本为Hadoop …

计算机无法上无线网络连接到internet,电脑连接不上无线网络,教您怎么解决电脑连接不上无线网络...

小编家的那位笔记本姐姐之前可能是受委屈了&#xff0c;一个一个的电脑问题丢出来给我解决。之前有段时间总是出现电脑连接不上无线网络的问题&#xff0c;弄得那短时间天天都在想办法是解决。现在&#xff0c;我就要将这种解决方法分享给你们&#xff0c;让你们在遇到这个问题…

格兰杰因果关系检验_混频(mixed frequency)数据的格兰杰因果(Grange causality)检验及其Matlab实现...

格兰杰和格兰杰因果网络搜到的Grange大神标准照格兰杰1934年9月出生于英国威尔士的斯旺西&#xff0c;早期就读于诺丁汉大学&#xff0c;接受当时英国第一个经济学数学双学位教育&#xff0c;1955年留校任教&#xff0c;1957年在天文学杂志上他发表了第一篇论文&#xff1a;“关…

后台窗口截图_万人拥捧的截图软件来啦!让你的工作效率提升不止一倍!

文章来自微信公众号&#xff1a;小七有料直接进入正题&#xff0c;今天不野给大家分享两款截图软件——Snipaste和FastStone Capture&#xff0c;前者与其说是一个截图软件&#xff0c;我更愿意称之为贴图软件。两者都在工作中很大程度提高了我的效率&#xff0c;也简便化了我很…

ibm nvidia 超级计算机,IBM,Nvidia和美国能源部组成一个超级计算机超级团队

CNET技术信息网7月15日国际报道: IBM将与Nvidia和美国能源部合作建立两个新的杰出超级计算机中心. 这项合作的工作主要集中在两个方面&#xff0c;一个是确保应用程序可以充分利用超级计算机的强大性能&#xff0c;另一个是收集开发人员&#xff0c;工程师和科学家的反馈.这两个…