下面三位大佬是在优化器领域的代表性人物。今天进入第三位大佬的作品:Volcano,其后续优化版是Cascade。
主要思想和Starburst类似,采用规则机制、主打可拓展性。把优化器做成类似yacc的生成器,而不是采用硬编码的机制。首次发表在以下论文中:The Volcano Optimizer Generator: Extensibility and Efficient Search,ICDE93
规则变换
logical→logical,比如A join B可以替换为B join A
logical→physical,比如A join B可以替换成 A hashjoin B或者A merge join B。
注意,规则系统是带有if条件的,只有满足条件时才能进行替换。下面的伪代码中叫做moves。
规则系统是可以拓展的,如果数据库开发了新的feature,硬编码的工作量会很大。
伪代码
整体过程是一个递归,过程中递归规则替换。这个大体框架类似于求数组全排列的经典问题的代码框架。
注意:上述代码第三个参数limit,可以用于bound剪枝。
优化器就是一个search engine,枚举出所有plan,并search出代价最优或尽可能好的plan。