查询处理中的物化

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

在前文中,我们简要介绍了物化以及如何评估表达式的多个操作。

物化是一种简单的方法,用于评估给定查询的多个操作并将结果存储在临时关系中。结果可以是任何连接条件、选择条件等的输出。因此,物化是为用户查询创建和设置已评估操作结果视图的过程。它类似于缓存内存,搜索到的数据会临时存储在那里。通过表达式的图示表示,我们可以轻松理解物化的工作原理。操作符树用于表示表达式。

物化使用以下方法来评估给定表达式的操作:

  • 在操作符树中,我们从表达式的最低级别操作(树的底部)开始。最低级别操作的输入以数据库中关系的形式存储。例如,假设我们要从 'Student' 关系中获取名为 'John' 的学生姓名。
    关系表达式将是:
    σ name= "John" (Student)
    在此示例中,只有一个操作是从给定关系中选择姓名。同样,此操作是最低级别操作。因此,我们将首先评估此选择操作。
  • 现在,我们将使用适合评估操作的适当算法。例如,在我们的示例中,我们将使用适当的选择算法从 Student 关系中检索姓名。
  • 然后,将操作的结果存储在临时关系中。
  • 我们使用这些临时关系来评估操作符树中下一级别的操作。结果作为树中每个向上级别的输入。
  • 重复这些步骤,直到树的根部所有操作符都被评估,并且生成表达式的最终结果。

我们还将描述的评估称为物化评估,因为一个操作的结果被物化并用于下一个操作的评估,依此类推。

物化评估的成本估算

物化评估的成本估算过程与算法成本的估算过程不同。这是因为在分析算法的成本时,我们不包括将结果写入磁盘的成本。但在表达式的评估中,我们不仅计算所有操作的成本,还包括将当前已评估操作的结果写入磁盘的成本。

为了估算物化评估的成本,我们假设结果存储在缓冲区中,当缓冲区完全填满时,结果将写入磁盘。

令写入的总块数为 br。因此,我们可以估算 br 为:

br = nr/fr

这里,nr 是结果关系 r 中元组的估计数量,fr 是关系 r 的记录数,该记录数适合一个块。因此,fr 是结果关系 r 的阻塞因子。

有了这个,我们还需要通过估算所需磁盘的数量来计算传输时间。这是因为在块的连续写入之间,磁盘磁头可能已经移动。因此,我们可以估算:

寻道次数 = Γ br/ bb

这里,bb 定义了输出缓冲区的大小,即以块为单位测量。

我们可以使用双缓冲的概念来优化物化过程的成本估算。双缓冲是一种使用两个缓冲区的技术,其中一个缓冲区连续执行算法,而另一个缓冲区正在被写入。它通过将 CPU 活动与 I/O 活动并行执行,从而使算法执行得更快。我们还可以通过为输出缓冲区分配额外的块并一次性写入多个块来减少寻道次数。


下一主题合并连接算法