查询处理
查询处理的基本步骤包括:
- 语法分析与翻译
- 优化
- 执行
下图是一个查询处理的步骤原理图
需要注意的是,磁盘只能用于存储,而由于存储结构多级缓存的原因,CPU无法直接对磁盘进行处理,而只能将磁盘中的数据复制到内存然后对内存进行修改处理,最后再将内存中更新的数据重新传回到磁盘中来修改磁盘中的数据。
查询代价的度量:我们用传送磁盘块数以及搜索磁盘的次数来度量查询计算计划的代价。假设磁盘子系统传输一个块的数据平均消耗 tT 秒,磁盘块平均访问时间为 ts 秒,则一次传输b个块以及执行S次磁盘搜索的操作将消耗b*tT+S*ts秒。
对于查询的代价度量,不同的查询方法CPU有不同的处理方法,所以代价也不相同。
选择运算:
br指关系r的磁盘块数,nr指关系r的元组数
排序运算:
对于不能全部放在内存中进行的关系排序称为外排序。外排序中最常见的技术是外部归并排序算法。下图是归并排序的实例过程
归并排序需要传送磁盘块次数为:
M表示内存缓存区中可以用于排序的块数,即内存的缓冲区能容纳的磁盘块数。bb表示输出阶段内存为每个关系分配的缓存块
归并排序总的磁盘搜索次数为:
链接运算:
- 嵌套循环链接
最坏的情况:内存只能每个关系容纳一个块
此时磁盘块传送次数:br+nr*bs,搜索次数nr+br
最好的情况:内存能够直接装入两个关系
此时磁盘块传送次数:br+bs,搜索次数 2
- 块嵌套循环链接
最坏的情况:内存只能每个关系容纳一个块,并且对每个关系r的块都需要遍历关系s的所有块才能够找到匹配项
此时的磁盘块传送次数:br+br*bs,搜索次数2br
最好的情况:内存能直接装入两个关系
此时的磁盘块传送次数br+bs,搜索次数2
- 归并链接
如果两个关系未经过排序,那么在归并链接之前需要先进性归并排序,经过排序后,
磁盘块传送次数br+bs,而搜索次数为ceil(br/bb)+ceil(bs/bb)
- 散列链接
磁盘块传送次数3(br+bs)+4nk,其中nk为关系划分的个数,往往很小可以忽略
查询结果估算
TR表示关系R中的元组数目
BR表示关系R的磁盘块数
IR表示关系R每个元组的字节数
fR表示一个块能够存储的关系R的元组数目
V(R, A)表示R中属性A出现的不同值的数目
SC(R, A)表示R中属性A的选择基数,即满足A上等值条件的平均记录数
- 估算一个投影的大小:
TR
- 估算一个选择的大小:
等值选择
TR/V(R, A)
当不知道V(R, A)的时候,结果估算为TR/10
比较选择
TR/3
- 估计一个连接的大小
(TR*TS) / max( V(R, Y), V(S, Y) )
需要注意的是,当选择的条件是复合条件的时候,需要用概率论进行进一步的大小估算。