整个流程图如下:
一、查询代价的度量
查询执行计划的响应时间=磁盘存取时间+CPU时间+通信开销。
二、选择运算
查询处理中,文件扫描(file scan)是存取数据最低级的操作。
三、N路归并排序(对不能全部放在内存中的关系的排序的一种算法)
N路归并排序代价=磁盘存取代价+磁盘搜索代价
四、连接运算的代价
1.嵌套循环连接:主要有两个嵌套的for循环构成。不需要索引,不管连接条件,代价大,需要逐个检查两个关系中的每一对元组。
2.块嵌套循环连接:是嵌套循环连接的变种,以块为单位,而不是元组。
3.索引嵌套循环连接:若在内层循环的连接属性上有索引,则可以用索引查找替代文件扫描。
4.归并连接:可用于计算自然连接和等值连接(原理?)
5.混合--归并连接:把已排序关系和另一关系的树辅助索引叶结点进行归并。
6.散列连接:
① 用散列函数h划分两个关系的元组。把每个关系的元组划分成在连接属性值上具有相同散列值的元组集合。
② 递归划分:系统不断重复输入的分裂过程直到构造用输入关系的每个划分都能被内存容纳为止。
③ 溢出处理:增加划分个数;‚溢出分解(大变小);ƒ溢出避让(小合成大)
7.复杂连接:转换成多个简单连接。
五、其他运算
1.去除重复:排序的方式;‚散列实现去重;
2.投影:先对元组投影,再去重;
3.集合运算(并、交、差):先对两个关系排序,然后对两个关系扫描;‚用相同的两个散列函数进行划分
4.外连接:计算相应的连接,然后将适当的元组加入到连接结果中以得到外连接结果;‚对连接算法加以修改。
5.聚集(基于某一分组group):在分组的构造过程中就实现聚集运算。
六、表达式计算
将一个表达式看出运算符树,从树的最底层开始计算。
流水线执行:前一个的输入极为后一个的输出,减少中间结果的写入。分为需求驱动流水线和生产者驱动流水线。