跳转至

4.4 物理优化:查询计划树到物理执行计划(选做)

代数优化改变查询语句中操作的次序和组合,但不涉及底层的存取路径。物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划,达到查询优化的目标。

查询优化器在物理优化阶段,主要解决的问题包括:

  • 单表扫描过程应该选择何种算法?
  • 两表连接使用何种连接算法?
  • 多表连接如何确定连接算法顺序?
  • 查询计划的规划时间是否可接受?

可以选择基于规则的启发式优化或基于代价估算的优化。基于规则的启发式算法一般相对简单,优化效果一般但是速度较快,适合于解释执行的系统,查询优化和查询执行同时进行。编译执行的方式则是先进行编译优化后整体执行,查询优化和查询执行分离,此时使用基于代价估算的优化更容易获得更好的优化效果,但是可能会面临执行计划的选择空间很大,优化时间开销过高的问题。而将两者结合,先使用启发式算法限制候选空间,对于候选空间内的方案进行代价估计,这样可以在较短时间内获得一个相对较优的执行计划。

这一部分是数据库系统的核心内容之一,物理计划的选择对于查询执行速度的影响是十分巨大的。很多情况下,一个不合理的的物理执行计划将会造成多个数量级的时间和空间开销。但是考虑到物理优化与底层系统设计有很强关联性,同时较为经典的物理计划选择算法都具有一定的实现难度。所以物理优化部分仅作为选做内容,如果各位同学希望对于这一部分进行深入研究,可以自行调研相关的经典文献并进行实现。

Authors: Congyuan Rao (22.22%), Haowen Dong (66.67%)