跳转至

逻辑计划优化

1.Late Materialization

对于OLAP来说,由于OLAP常采用列式存储的形式,从一开始就获取所有数据的成本就是较大的。

因此,我们想要尽可能推迟读取的时间。这会使得不需要的Tuple会被筛除掉,减少读取成本。

对于一个语句来说,我们只传递其必要的属性和唯一标识符,用于执行语句以及执行语句完毕后的回表查询。

2.Expression Evaluation

如何对判断条件进行优化判断,即Where语句。

我们将Where语句表达成一棵树,称之为Expression Tree,其判断条件对应树上的一个节点。

15445-6

在该示例中我们需要将S.value与常量100比较,但最开始的时候,可以将该常量看成一个变量。数据库利用一个占位符去表示它,直到树构建完成后再进行填入。

在执行语句的时候,实际上会在构建的表达式树上进行中序遍历,将子节点的数据与父节点的逻辑运算符进行运算。

然而,若有一些冗余或无用语句,如WHERE S.value = (constant + 1),constant可以预优化为constant = constant+1;如WHERE 1=1,为一个永远为真的语句。

这些语句都会构建出无用的子树,从而在执行语句时每次都要带来额外的遍历消耗。