数据库算法简单嵌套循环连接

时间:2015-12-01 19:20:26

标签: database algorithm

给定关系:

Sailors (sid: integer, sname: string, rating: integer, age: real)
Reserves (sid: integer, bid: integer, day: dates, rname: string)

查询

SELECT  *
FROM   Reserves R, Sailors S
WHERE  R.sid=S.sid

假设:

M pages of R, pR tuples per page (i.e., number of tuples of R = M * pR) 
N pages of S, pS tuples per page (i.e., number of tuples of S = N * pS)

成本是I / O的数量(忽略输出成本)

查询算法

foreach tuple r in R do
    foreach tuple s in S do
        if ri == sj  then add <r, s> to result

费用

Scan of outer  +    for each tuple of outer, scan of inner relation.

Cost  =     M    +     pR * M * N  I/Os

我对成本的最终结果感到困惑。如果我们要扫描R中的每个元组然后扫描每个r,那么扫描S中的每个元组,那么最终的成本是不是R*S = M*pR*N*pS? (R = M * pR,S = N * pS)。我不确定为什么会有一个附加符号。 I / O仅占帐户页面吗?而不是记录?

1 个答案:

答案 0 :(得分:1)

你给自己正确的答案:

  

I / O是否只占网页?而不是记录?

这些情况下的成本是以磁盘访问的数量计算的。 I / O操作将整个页面而不是记录从磁盘传输到主存储器,反之亦然(这正是页面的含义:两个存储器之间的最小传输单位)。

因此,由于嵌套循环算法仅读取关系R一次,因此第一项等于读取它的I / O操作数,等于其页数。