第九章关系查询处理和关系优化-第四节:查询优化之物理优化

代数优化改变查询语句中操作的次序和组合,但不涉及底层的存取路径。对于一个查询语句有许多存取方案,它们的执行效率不尽相同,因此,仅仅进行代数优化是远远不够的

物理优化就是要选择高效合理的操作算法或存取路径以求得优化的查询计划。具体方法有

  • 基于规则的启发式优化:启发式规则是指那些在大多数情况下都适用,但不是在每种情况下都是最好的规则
  • 基于代价估算的优化:使用优化器估算不同执行策略的代价,并选出具有最小执行代价的执行计划
  • 两者结合的优化方法

一:基于启发式规则的存取路径选择优化(定性)

(1)选择操作的启发式规则

A:小关系

对于小关系,使用全表顺序扫描,即使选择列上有索引

B:大关系

启发式规则有:

  • 对于选择条件是“主码=值”的查询,查询结果最多是一个元组,可以选择主码索引。一般的RDBMS会自动建立主码索引
  • 对于选择条件是“非主属性=值”的查询,并且选择列上有索引,同样要估算查询结果的元组数目,如果选择率<10%可以使用索引扫描方法,否则还是使用全表扫描
  • 对于用AND连接的合取选择条件,如果有涉及这些属性的组合索引,则优先采用组合索引扫描方法
  • 对于用OR连接的析取选择条件,一般使用全表顺序扫描

(2)连接操作的启发式规则

  • 如果2个表都已经按照连接属性排序,则选用排序-合并算法
  • 如果一个表在连接属性上有索引,则可以选用索引连接算法
  • 如果上面2个规则都不适用,其中一个表较小,则可以选用hash join算法
  • 最后可以选用嵌套循环算法,并选择其中较小的表,确切地讲是占用的块数(B)较少的表,作为外表(外循环的表)(具体原因在第二节已经讲过)

二:基于代价估算的优化(定量)

(1)统计信息

基于代价的优化方法要计算各种操作算法的执行代价,它与数据库的状态密切相关。为此在数据字典中存储了优化器需要的统计信息(database statistics), 主要包括如下几个方面:

  • 基本表:该表的元组总数(NN)、元组长度(ll)、占用的块数(BB)、占用的溢出块数(BQBQ)等
  • 基本表每个列:该列不同值的个数(mm)、该列最大值、最小值,该列上是否已经建立了索引,如果有,又是哪一种索引等
  • 索引:索引的层数(LL)、不同索引值的个数、索引的选择基数SS

(2)代价估算示例

  • 此部分了解即可,不做深入探究

A:全表扫描算法代价估算公式

在这里插入图片描述

B:索引扫描算法代价估算公式

在这里插入图片描述

C:嵌套循环算法代价估算公式

在这里插入图片描述

D:排序-合并连接算法的代价估算公式

在这里插入图片描述

#数据库##考研#

数据库系统概论王珊第五版笔记

全部评论

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务