Meaturing of query cost
t
T
t_T
tT – time to transfer one block. (≈ 0.1ms)
t
S
t_S
tS – time for one seek. (≈ 4ms)
Cost for b block transfers plus S seeks :
b
∗
t
T
+
S
∗
t
S
b* t_T + S* t_S
b∗tT+S∗tS
External merge sort
cost:
M: 缓冲区能容纳的磁盘块数
b
r
b_r
br: 关系r中记录的磁盘块数
b
b
b_b
bb: 每次从一个归并段读取的数据数
merge passes required:
  
⌈
l
o
g
M
−
1
(
b
r
/
M
)
⌉
\; \lceil log_{M-1}(b_r/M) \rceil
⌈logM−1(br/M)⌉
total number of block transfer:
  
b
r
(
2
⌈
l
o
g
M
−
1
(
b
r
/
M
)
⌉
+
1
)
\; b_r(2\lceil log_{M-1}(b_r/M) \rceil + 1)
br(2⌈logM−1(br/M)⌉+1)
total number of seeks:
  
2
⌈
b
r
/
M
⌉
+
⌈
b
r
/
b
b
⌉
(
2
⌈
l
o
g
M
−
1
(
b
r
/
M
)
⌉
−
1
)
\; 2\lceil b_r/M \rceil + \lceil b_r / b_b \rceil (2 \lceil log_{M-1}(b_r/M) \rceil -1 )
2⌈br/M⌉+⌈br/bb⌉(2⌈logM−1(br/M)⌉−1)
Join
元组数较少的关系作为外层关系时效果较好
nested-loop join 嵌套循环连接
n: 元组数(记录数)
b: 磁盘块数
worst case:
  
n
r
∗
b
s
+
b
r
\; n_r * b_s+b_r
nr∗bs+br block transfer, plus
n
r
+
b
r
n_r +b_r
nr+br disk seeks
best case:
  
b
r
+
b
s
\; b_r + b_s
br+bs block transfer, plus 2 seeks
block nested-loop join 块嵌套循环连接
worst case:
  
b
r
∗
b
s
+
b
r
\; b_r * b_s+b_r
br∗bs+br block transfer, plus
2
∗
b
r
2*b_r
2∗br seeks
best case:
  
b
r
+
b
s
\; b_r + b_s
br+bs block transfer, plus 2 seeks
improve:
  
⌈
b
r
/
(
M
−
2
)
∗
b
s
+
b
r
⌉
\; \lceil b_r / (M-2) * b_s + b_r \rceil
⌈br/(M−2)∗bs+br⌉ block transfer, plus
2
⌈
b
r
/
(
M
−
2
)
⌉
2\lceil b_r / (M-2 ) \rceil
2⌈br/(M−2)⌉ seeks
indexed nested-loop join 索引嵌套循环连接
c: 用连接条件对s进行单次选择操作的代价
cost of join:
  
b
r
(
t
T
+
t
S
)
+
n
r
∗
c
\; b_r(t_T+t_S)+n_r*c
br(tT+tS)+nr∗c
merge-join 排序归并连接
b
r
+
b
s
b_r+b_s
br+bs block transfers +
⌈
b
r
/
b
b
⌉
+
⌈
b
s
/
b
b
⌉
\lceil b_r/b_b \rceil + \lceil b_s / b_b \rceil
⌈br/bb⌉+⌈bs/bb⌉ seeks
hash-join
M
>
n
h
+
1
M>n_h +1
M>nh+1 或
M
>
(
b
s
+
M
)
+
1
M>(b_s+M)+1
M>(bs+M)+1 或
M
>
b
s
M>\sqrt {b_s}
M>bs 时不需要递归划分
不需要递归划分时:
3
(
b
r
+
b
s
)
+
4
∗
n
h
3(b_r + b_s) +4 * n_h
3(br+bs)+4∗nh block transfers +
2
(
⌈
b
r
/
b
b
⌉
+
⌈
b
s
/
b
b
⌉
)
2( \lceil b_r / b_b \rceil + \lceil b_s/b_b \rceil)
2(⌈br/bb⌉+⌈bs/bb⌉) seeks
需要递归划分时:
2
(
b
r
+
b
s
)
⌈
l
o
g
M
–
1
(
b
s
)
–
1
⌉
+
b
r
+
b
s
2(b_r + b_s) \lceil log_{M–1}(b_s) – 1 \rceil + b_r + b_s
2(br+bs)⌈logM–1(bs)–1⌉+br+bs block transfers +
2
(
⌈
b
r
/
b
b
⌉
+
⌈
b
s
/
b
b
⌉
)
⌈
l
o
g
M
–
1
(
b
s
)
–
1
⌉
2(\lceil b_r / b_b \rceil + \lceil b_s / b_b \rceil ) \lceil log_{M–1}(b_s) – 1 \rceil
2(⌈br/bb⌉+⌈bs/bb⌉)⌈logM–1(bs)–1⌉ seeks