📅  最后修改于: 2020-12-12 08:14:20             🧑  作者: Mango
在前面的内容中,我们简要介绍了关于实现以及如何评估表达式的多个操作的信息。
实现是评估给定查询的多个操作并将结果存储在临时关系中的简便方法。结果可以是任何连接条件,选择条件等等的输出。因此,实现是为用户查询创建和设置评估操作结果视图的过程。它类似于高速缓存存储器,在该高速缓存存储器中,搜索到的数据会暂时稳定下来。通过表达的图形表示,我们可以轻松理解实现的工作。运算符树用于表示表达式。
实现使用以下方法来评估给定表达式的操作:
我们还将描述的评估称为实现评估,因为一个操作的结果被实现并用于下一操作的评估等。
估算物化评估成本的过程与估算算法成本的过程不同。这是因为在分析算法的成本时,我们不包括将结果写入磁盘的成本。但是在表达式的求值中,我们不仅计算所有操作的成本,还包括将当前求值的结果写入磁盘的成本。
为了估算实现评估的成本,我们认为结果存储在缓冲区中,当缓冲区完全填满时,结果存储在磁盘中。
令,总共写入了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活动,使算法可以更快地执行。我们还可以通过将额外的块分配给输出缓冲区并完全写出多个块来减少搜索次数。