查询优化器结构(数据库)
时间:2022-12-14 04:30:01 | 来源:信息时代
时间:2022-12-14 04:30:01 来源:信息时代
查询优化器结构 : 查询优化机制的组成构件。关系数据库的查询优化器主要由两部分组成: 代数优化器和物理优化器,如图1所示。
图1 查询优化器的结构
代数优化器负责查询的代数优化,即根据关系代数的等价变换规则及一套启发式规则,通过对查询做等价变换,达到优化查询执行的目的。常用的启发式规则包括: 选择运算应尽可能先做; 把投影运算和选择运算同时进行,以避免重复扫描关系:把投影同其前或其后的双目运算结合起来,以避免重复扫描关系; 把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算,以大量减少中间结果集的大小;寻找公共子表达式,避免公共子表达式的重复计算。关系代数的等价变换规则保证了运用这些启发式规则进行等价变换的正确性。
代数优化仅仅是通过改变查询语句中操作的次序和组合来优化查询,它不涉及底层的存取路径,因此,仅仅进行代数优化是不够的。物理优化是选择高效合理的操作算法或存取路径,以求得优化的查询计划,从而达到查询优化的目标。
由逻辑计划生成一个物理计划时要做的工作包括增加扫描、排序、分组、去重等操作符;确定满足结合律与分配律的操作符(如连接、并、交等)的次序;确定各个操作符的算法; 确定参数从一个操作符传送到下一个操作符是采用实体化方式还是采用流水线方式等。
物理优化器包括基于代价、基于规则、基于语义及同时基于代价和规则等几种。
基于规则的物理优化是依据一套启发式规则来选择操作算法或存取路径,这些启发式规则适用于大多数情况,但非所有情况。所以基于规则的物理优化,优化本身的速度比较快,但可能丢失好的执行计划。同时它往往对用户查询语句的质量要求较高,对于同一个查询,好的查询语句可能获得更高的效率。
基于代价的物理优化是根据数据字典中记载的各种统计信息,估算各种执行策略的代价,并从中选择一个系统认为是“最好”的执行策略。基于代价的优化方法可以找出各种可能的选择(连接的各种排列次序、并的各种排列次序、操作符各种实现算法等)加以组合,对每个可能的物理计划估算代价和内存需求量,在满足内存需求的前提下选择具有最小代价的计划。基于代价的优化方法可以找出最优的执行计划,但优化的开销可能会比较高。
基于代价的物理优化由于要遍历全部物理计划的搜索空间,因此代价会比较高。为了减少物理优化本身的开销,基于代价的查询优化常常与启发式优化结合起来,通过启发式规则来缩减代价优化的搜索空间,这就是同时基于代价和规则的物理优化。由于在利用启发式规则缩减搜索空间时,可能会失去最优计划,因此这种优化策略寻找的是较好的查询计划而非最优的计划,但对查询的总响应时间却可能要短于以高昂代价获得最优计划并执行的时间。
基于语义的查询优化是利用关系上定义的各种完整性约束条件,通过查询重写,将给定的查询变换为更有效的等价查询。基于语义的优化通常与基于规则或基于代价的优化结合使用。