📜  查询处理中的实现

📅  最后修改于: 2020-12-12 08:14:20             🧑  作者: Mango

查询处理中的实现

在前面的内容中,我们简要介绍了关于实现以及如何评估表达式的多个操作的信息。

实现是评估给定查询的多个操作并将结果存储在临时关系中的简便方法。结果可以是任何连接条件,选择条件等等的输出。因此,实现是为用户查询创建和设置评估操作结果视图的过程。它类似于高速缓存存储器,在该高速缓存存储器中,搜索到的数据会暂时稳定下来。通过表达的图形表示,我们可以轻松理解实现的工作。运算符树用于表示表达式。

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

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

我们还将描述的评估称为实现评估,因为一个操作的结果被实现并用于下一操作的评估等。

物化评估的成本估算

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

为了估算实现评估的成本,我们认为结果存储在缓冲区中,当缓冲区完全填满时,结果存储在磁盘中。

令,总共写入了b r个块。因此,我们可以将b r估计为:

b r = n r / f r

在此,n r是结果关系r中的元组的估计数,fr是适合于块的关系r的记录数。因此,fr是结果关系r的阻碍因素。

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

搜寻次数= Γb r / b bꓶ

b b定义输出缓冲区的大小,即以块为单位。

通过使用双重缓冲的概念,我们可以优化实现过程的成本估算。双缓冲是使用两个缓冲区的方法,其中一个缓冲区连续执行算法,而另一个缓冲区被写出。通过与I / O活动并行执行CPU活动,使算法可以更快地执行。我们还可以通过将额外的块分配给输出缓冲区并完全写出多个块来减少搜索次数。