逻辑计划优化
1.Late Materialization¶
对于OLAP来说,由于OLAP常采用列式存储的形式,从一开始就获取所有数据的成本就是较大的。
因此,我们想要尽可能推迟读取的时间。这会使得不需要的Tuple会被筛除掉,减少读取成本。
对于一个语句来说,我们只传递其必要的属性和唯一标识符,用于执行语句以及执行语句完毕后的回表查询。
2.Expression Evaluation¶
如何对判断条件进行优化判断,即Where语句。
我们将Where语句表达成一棵树,称之为Expression Tree,其判断条件对应树上的一个节点。
在该示例中我们需要将S.value与常量100比较,但最开始的时候,可以将该常量看成一个变量。数据库利用一个占位符去表示它,直到树构建完成后再进行填入。
在执行语句的时候,实际上会在构建的表达式树上进行中序遍历,将子节点的数据与父节点的逻辑运算符进行运算。
然而,若有一些冗余或无用语句,如WHERE S.value = (constant + 1),constant可以预优化为constant = constant+1;如WHERE 1=1,为一个永远为真的语句。
这些语句都会构建出无用的子树,从而在执行语句时每次都要带来额外的遍历消耗。