根据嵌套连接,给定关系 R 和 S
对于 R 中的每个元组 r 做
对于 S 中的每个元组 s 做
如果 r 和 s 满足连接条件
然后输出元组
上述循环的成本估算:
– b(R) 和 b(S) R 和 S 中的块数
– 外部关系的每个块被读取一次
– 对每个外部关系块读取一次内部关系
总结:IO= b(R)+n(R)*b(S) 总IO操作
让我们假设 |R|>|S|即 b(R) =10 , n(R) = 100 , n(S)= 30 和 b(s) =3
现在,如果 R 是外关系,则 IO= 10+100*3=340
如果 S 是外关系则 IO=3+30*10=303
可以观察到,如果外部变量的值较小,并且已经给出 |R|<|S|,则总 IO 较小。因此,关系 r(R) 应该在外部循环中以减少磁盘块访问次数。
参考:
- https://www.informatik.huberlin.de/de/forschung/gebiete/wbi/teaching/archive/sose05/dbs2/slides/09_joins.pdf
- https://en.wikipedia.org/wiki/Nested_loop_join
这个问题的测验