设为首页 收藏本站
查看: 788|回复: 0

[经验分享] SQL Server 2000执行计划成本(1/5)

[复制链接]

尚未签到

发表于 2016-11-5 09:22:28 | 显示全部楼层 |阅读模式
  
[转]SQL Server 2000执行计划成本(1/5)
表扫描 

      当没有合适的索引时就发生表扫描操作。这可能意味着没有索引存在或者预期有很多行且比扫描整个表开销更少。如果表是一个堆表,执行计划显示表扫描操作;如果表有聚集索引或者所有需要的值都在一个非聚集索引里如图2-6显示,那么执行计划显示一个索引扫描操作。

http://www.sql-server-performance.com/images/jc_sql9.jpg
http://www.sql-server-performance.com/images/jc_sql10.jpg 
图2-6.表扫描的执行计划和聚集索引扫描操作

      图2-7和2-8显示表扫描和索引扫描操作的成本细节。索引扫描和表扫描有相同的成本结构。

http://www.sql-server-performance.com/images/jc_sql11.jpg 
图2-7.表扫描的成本细节 
http://www.sql-server-performance.com/images/jc_sql12.jpg 
图2-8.聚集索引扫描的成本细节

通过检查表的一个范围的页和行的I/O和CPU成本,执行计划成本规则如下:
I/O Cost = 0.0375785 + 0.000740741 per additional page
CPU Cost 
= 0.0000785 + 0.0000011 per row
I/O的基本成本(0.0375785)正好是6×0.0062500+0.0000785。通过任何平台(1P/2P/4P)观察到的表扫描成本组成没有任何变化。 
索引搜索和表扫描的交叉点 
      每个表只能有一个聚集索引。为每个查询建立覆盖索引而不使用聚集索引总是不切实际的。那么执行计划里可能执行下面两个选项中的一个:1)一个带有书签查找的索引搜索,或者2)表扫描(或聚集索引扫描)。当从搜索参数里预期只有少量的行时,执行计划采用带书签查找的索引搜索。当预期有很多行时,执行计划采用表扫描。正确的理解执行计划在哪儿从一个变为另一个是有用的。

http://www.sql-server-performance.com/images/jc_sql59.jpg
 http://www.sql-server-performance.com/images/jc_sql59.jpg

      表扫描的成本通过表使用的页数和表总共的行数来决定。表扫描的成本不依赖于返回的行数(除非使用聚合函数)。索引搜索操作的成本仅依赖于返回的行数和选择行数所在的索引的叶页数,但不依赖于影响索引深度的表的绝对大小。书签查找操作的成本是由表的大小影响的(以不确定的倍数关系影响),但适当地与行数线性相关。 
      表扫描开销小于带有书签查找的索引搜索的交叉点是通过使两个执行计划成本规则相等来决定的。通过把在书签查找I/O成本的不确定的倍数作为修正因子(CF)且撇开小成本的组成部分,交叉点就能大概被确定了。 
两个执行计划在固定的启动成本上的区别是1P/2P系统有大约5个书签查找而4P系统有11个。对于1P/2P系统每增加一个书签查找行的成本是0.0062511的一倍而4P系统是0.0031260的一倍,包括I/O成本和CPU成本。表扫描里每增加一页的成本是0.000740741+0.0000011×(每页的行数)。这样,交叉点遵循的规则大约和下面的相关:索引搜索条件涉及到的行数和表的页数,术语称为页行比(pages-to-rows ratio)和修正因子(CF)。页行比在表扫描增加的成本与一个书签查找的成本相等时简单的指页数。修正因子(CF)是书签查找成本的百分比。 

Rows ~  5  + 页数 ÷ (CF×(页行比))  (1P/2P系统)
        
~ 11 + 页数 ÷ (CF×(页行比))  (4P系统)

 
既然表扫描里增加页的成本依赖于每页的行数,那么页行比就反映了每页的行密度。如图2-9所显示。

http://www.sql-server-performance.com/images/jc_sql14.gif 
图2-9.页行比对每页的行密度

      例如,考虑平均密度为每页100行的一个表。对于1P/2P系统的页行比是7.35且CF是~0.90。对于一个有506页的表来说,预计的交叉成本大约在81.5行发生,实际是84行。换句话说,当要求书签查找的时候,查询优化器为了使用索引而非表扫描需要索引的可选择性好于表里每0.9×7.35页就有1行。也许在成本交叉点和计划事务点处有细微的不同。 
      图2-10显示了索引搜索和被看作行功能的书签查找的执行计划成本和表扫描50000行每页99行的成本。表扫描的成本不依赖于返回的行。

http://www.sql-server-performance.com/images/jc_sql15.gif 
图2-10.有50000行且每页99行的表的计划成本

      图2-11共同显示了对于1P/2P和4P系统的索引搜索和作为行功能的书签查找计划的成本与表里计算页(假定每页100行)功能的表扫描的计划成本。为了比较也显示了作为行功能的覆盖索引搜索成本。如果知道页里表的大小,那么书签查找和表扫描的交叉点可以通过找到书签查找计划和表扫描有相同成本时的行数来决定,反之亦然。

http://www.sql-server-performance.com/images/jc_sql16.gif 
图2-11.行/页计划成本

      由于在1P/2P系统和4P系统里索引搜索和书签查找成本的不同,在4P系统上要达到表扫描交叉点的书签查找量是1P/2P系统的大约2倍。假定有很多多处理器系统使用共享总线,那么4P系统比1P/2P系统延迟切换到高总线带宽操作如表扫描上似乎是合理的。这一点没有明晰的解释。 
      在有大量的行参与时,书签查找计划成本对于1P/2P系统来说是覆盖索引搜索的700多倍而4P系统是350多倍。在这个例子里,覆盖索引每页正好超过400行。 
      注意覆盖索引和表扫描在很少的行参与时计划成本非常平坦。这是因为增加行的成本相对于固定的索引搜索和表扫描的基本成本而言是很低的。事实上,基于1P/2P系统的成本规则而言增加800行的成本是覆盖索引搜索每页100行成本的两倍,4P系统是400行。在45页里4500行的表扫描成本是单行表扫描的两倍。
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296014-1-1.html 上篇帖子: SQL Server存储过程的编写和优化措施 下篇帖子: [转]SQL Server 2000执行计划成本(3/5)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表