Optimizer Implementation(Part II)
在这儿解释一下,逻辑查询计划或者逻辑计划指的是关系代数层面的查询语句;物理查询计划或者物理计划指的是具体查询层面的查询算法,具体到每一个JOIN的算法选择,每一个SELECT操作的算法实现(scan或者index)。
瀑布模型(Cascades)
分层搜索(STRATIFIED SEARCH)
首先使用转换规则重写逻辑查询计划。
- 引擎检查是否允许转换,然后才能应用。
- 这一步从来不考虑成本,只考虑正确性。
然后执行基于成本的搜索以将逻辑计划映射到物理计划,在不同的优化器设计中会有不同的方式去实现。
POSTGRES OPTIMIZER
为查询优化强加一个严格的工作流程:
- 第一阶段用启发式进行初始重写
- 然后执行基于查询成本的搜索以查找最佳JOIN顺序。
- 其他一切都被视为“附加”。
- 然后递归下降到子查询。
因为程序的执行顺序必须保持一定,所以程序难以修改或扩展。如果上面的状态改变了,那么也将会影响到下面的子查询。
UNIFIED SEARCH
没有像上面两个方式一样一般有多个阶段的不同算法&#