第九章: 关系查询处理和查询优化

B+树索引

(这里只写了对于数据库做题有帮助的部分B+树内容)

B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。在数据库中,B+树叶子结点的上层都是索引,为了方便查找,不涉及记录的地址,每个叶子结点存放相应的记录,也就是元组。并且元组按键值有序排放,即按照有B+树索引的属性值有序排放

B+树上的查找类似于二叉排序树的查找,跟二分法是一致的。

通过一下例子,说明一下在B+树索引下的查找。

【例】

SELECT * FROM Student WHERE Sage > 20;

假定Sage上有B+树索引。

①使用B+树索引找到Sage = 20的索引项
②通过这个索引项在B+树的顺序集上找到Sage > 20的所有元组指针
③通过这些指针读取到Student表中的所有年龄大于20的学生记录

读写总块数:对B+树扫描时,对该检索路径上每个结点的读写块数+最终读取的Student表中满足条件元组的块数

很明显,与直接读取再做选择相比,大大降低了读写的块数。

在这里插入图片描述
在这里插入图片描述
第2题中涉及的主要是估算磁盘读写的块数,在课本288页,有一些代价估算的公式,有些可以理解,有些比较难理解,就直接拿来用了。

代价估算(按照课本整合)

1.全表扫描 cost = 基本表大小块数B

2.B+树索引扫描

(1)选择条件中为“码 = 值
码唯一标识元组,B+树层数为L cost = L+1;

(2)选择条件涉及非码属性
结果不唯一 cost = L+S(满足条件元组数)

3.嵌套循环连接
我不太理解书上的公式。涉及这个算法,还是参照281页的示例,比较好理解。注意连接结果一般需要写进中间文件,要加上对中间文件的读写。

4.排序合并连接
有序:cost = 两个表个扫描一遍块数 + 中间文件(连接结果)读写块数

无序:在有序的条件上在加上排序代价。
包含B个块的文件排序代价 = (2B)+(2B*log 2 _{2} B)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询优化

1.代数优化(作业3,5题)

借助优化工具:查询树

①语法树——②初始关系代数语法树——③根据规则优化查询树

总结常用规则(题中主要涉及的规则):
①将选择和下面的笛卡尔积合并为连接
②将涉及单个表的选择或投影下移到叶子端直接与相应的表相连

2.物理优化(作业4题)

选择高效合理的操作算法或存取路径。涉及到代价估算(作业2题)

相应的操作算法:
选择操作:①全表扫描 ②索引扫描
连接操作:①嵌套循环 ②排序合并 ③索引连接

【心得】在估算磁盘读写块数时,有些乱,在优化查询树的时候,很多规则,不知道从哪下手。感觉这章内容有些松散,有些乱。作业题与前面的例题相似,参照着例题做,没有很难,时间也没有很长。

原创文章 23 获赞 29 访问量 7284

猜你喜欢

转载自blog.csdn.net/fu_GAGA/article/details/105792829