1.实体化方法
选择+投影
过程:从树的最底层开始,输入关系利用前面算法执行运算,并将结果保存到临时关系中作为高一层和输入
代价:所有运算代价和+把中间结果写回磁盘的代价
所以需要估计中间结果的代价
2.流水线方法
流水线方法将运算组成流水线,一个运算结果传送到下一个运算,从而去除读写临时关系的代价
流水线是通过系统中的进程或线程建模,从流水化的输入中接受元组流并产生一个元组流作为输出,对流水线中每一相邻操作,均创建缓冲区保存上一操作输出的元祖
采用流水线会对一些操作的执行算法产生限制。
1.连接时输入来自流水线,可以使用索引嵌套循环,但归并连接不能使用
2.由于这个原因,流水线方法往往比实体化方法的代价要高
3.也正是由于这个原因,实体化方法更容易被接受,使用。采用双缓冲技术提高实体化方法的效率
一个SQL语句来了之后先进行语法分析,生成语法树,再生成逻辑查询计划,进行优化后,在优化后的逻辑查询计划的基础之上再生成物理查询计划,这个过程不是单线执行的,不是一次性就结束了,实际上是要执行多次的
我们生成一个逻辑查询计划,要对其进行优化,在基础上生成物理查询计划,再对物理查询计划优化,最后生成一个查询策略,不是生成查询策略就结束了,而是这个过程要再返回去,再对逻辑查询进行优化再生成物理查询计划,对两个物理查询计划进行比较,选择较小的,然后再优化再生成策略,一直到把所有的等价策略都试完了,我们选一个代价较小的查询策略
逻辑层次的查询优化,实际上就是关系代数表达式树的优化,主要用关系理论
物理查询计划的选择