表达式求值

2024 年 8 月 28 日 | 阅读 2 分钟

在之前的章节中,我们了解了查询处理中的各种概念。我们学习了查询处理的步骤、选择操作,以及执行连接操作的几种算法及其成本估算。

我们已经知道如何为给定的用户查询或表达式计算和表示各个关系操作。在这里,我们将了解如何计算和评估一个包含多个操作的表达式。

对于包含多个操作的表达式的求值,我们可以逐个进行计算。然而,在查询处理系统中,我们使用两种方法来求值包含多个操作的表达式。这些方法是:

  1. 物化
  2. 流水线

让我们简要讨论一下这些方法。

物化

在此方法中,给定的表达式一次只求值一个关系操作。并且,每个操作都按适当的顺序进行求值。在所有操作求值完成后,输出将被物化成一个临时关系以供后续使用。这使得物化方法存在一个缺点。缺点是需要为求值操作的结果分别构建这些临时关系。除非这些临时关系很小,否则它们会被写入磁盘。

流水线

流水线是物化方法的一种替代方法或途径。在流水线中,它使我们能够在一个流水线中同时求值表达式的每个关系操作。在此方法中,在一个操作求值后,其输出将被传递给下一个操作,并且该链一直持续到所有关系操作都彻底求值完毕。因此,在流水线中不需要存储临时关系。流水线这种优势使其成为比物化方法中使用的更好的方法。即使两种方法的成本也可能存在后续差异。但是,在不同情况下,这两种方法都能发挥最佳作用。因此,两种方式在各自的位置都是可行的。

我们将在接下来的章节中逐一详细描述和讨论物化和流水线方法。