Вариант решения задания №5

advertisement
Вариант решения к домашнему заданию 5.
Задача 1 (10 очков)
а) R(a,b,c)
S(e,s,c)
б) R(a,b,c,d)
T(b) =
S(b,c,e) =
 R.a->a, R.b->b,R.c->c,e ( R.a=S.a & R.c=S.c & R.b=T.b ( R X S X T))
 R.b=e & a<e ( R X S)
R.b=e & a<e
Задача 2 (15 очков)
а)
name(MovieStar) UB starName->name(StarsIn)
starName,sumLength(count>=3(
starName,SUM(length->sumLength,COUNT(*)count(Movie
б)
StarsIn)))
Задача 3 (10 очков)
b+f->x, b+d->y ( R(a,b,c,d)
S(e,f,b,d) ) =
b+f->x,b+d->y (b,d(R)
b,f,d(S))
Задача 4 (25 очков)
a). Поскольку T(R
T(W) =T(R
S) = T(R )*T(S)/MAX(V(R,b),V(S,b)),
S) = 1500*3000/MAX(900,750) = 4500000/900 = 5000,
V(W,c) = V(S,c) = 1500 по предположению “сохранения количества значений”, поэтому
T(W
U) = T(W)*T(U)/MAX(V(W,c),V(U,c)) = 5000*4500/1500 = 15000
b=10 (S) ) = T(S)/V(S,b) = 3000/750 = 4,
б). T(
d=20 (U))
в). Пусть W= (
X=Y
X, T(W) = T(Y)*T(X)/V(X,d),
T(Y)=T(U)/V(U,d)= 4500/750 = 6, T(X) = 6000, V(X,d)=600,
Следовательно, T(W) = 6*6000/600 = 60.
г). T(R X U X S ) = T(R)*T(U)*T(S) = 1500*4500*3000 = 20250000000.
e=30 (X) ) = T(X)/V(X,e) = 6000/1500 = 4
д). T(



f). T(W) = T( c=40 & d=50 (U) ) = T( c=40 ( d=50 (U) )) = (T(U )/V(U,d))/V(U,c) =
T(U)/(V(U,d)*V(U,c)).
Мы должны умножить общее количество кортежей T(U) (=4500) на вероятность того, что
кортеж будет удовлетворять обоим условиям c=40 и d=50. Эта вероятность = 1/(750*750)
имеет смысл, поскольку возможны 750*750 различных кортежей и (40,50) – один из них.
Итак,
T(W) = 4500/(750*750) = 5/625 = 0.008
c=40 & d>50 (U) ) = T(c=40 (d>50 (U) )) = T(c=40(Y) ).
g). T(W) = T(

T(Y) = T( d>50 (U) ) = T(U)/3 = 4500/3 = 1500, V(Y,c) = V(U,c) = 750 по предположению о
«сохранении количества значений». Следовательно, T(W) = T(Y)/V(Y,c) = 1500/750 = 2.
Задача 5 (40 очков)
В начале оценим план 1. Для чтения R.A необходимо B(R)=1200 случайных операций IO
(поскольку после каждого блока мы будем читать отношение S ). Далее, для каждого (из
1200000 кортежей R) мв должны проверить T(S)/V(S,b) кортежей S (предполагается, что
для каждого значения R.B имеется соответствующее значение S.B) затрачивая 1
случайную операцию IO на каждый кортеж S поскольку индекс S.b не кластеризованный.
Фильтрование кортежей при помощи условия R.c=S.c не требует дополнительно IO. Пусть
Trnd – среднее время случайной операции IO. Следовательно, общее количество IO для
плана 1 будет
N1 = B(R) + T(R)*T(S)/V(S,B) = 1200*Trnd + T(R)*360000/90000 Trnd = 1200*Trnd +
T(R)*4*Trnd
Рассмотрим теперь план 2. То же количество 1200 случайных IO для чтения R.
Предположим, что существует S.C для каждого R.C, тогда число соответствующих
кортежей S для проверки атрибута В будет T(S)/V(S,C), но так как индекс по S.C –
кластеризованный, нам нужно будет прочитать только (T(S)/V(S,C)*100) блоков, первый
блок – случайно, а остальные - последовательно. Пусть Tseq – среднее время чтения
последовательного блока, тогда общее время IO для плана 2 (не нужно дополнительно IO
для фильтрования по условию R.b=S.b):
N2 = 1200*Trnd + T(R)*Trnd + T(R)*(T(S)/(V(S,C)*100) – 1)*Tseq =1201200*Trnd +
T(R)*39*Tseq
Сравним N1 и N2. N2 лучше, если
1201200*Trnd + T(R)*39*Tseq < 1200*Trnd + T(R)*4*Tseq, или
T(R)*39*Tseq < T(R)*3*Trnd, или окончательно Tseq/Trnd < 1/13
Если V(S,C)=1000, то план 2 - лучше (предполагая, что Tseq<Trnd), поскольку выражение
для общего времени IO плана 1 не изменится, а для плана 2
N2 = 1200*Trnd + T(R)*Trnd + T(R)*(360000/(1000*100) –1)*Tseq =
1200*Trnd + T(R)*Trnd + T(R)*2.6*Tseq < 1200*Trnd + T(R)*Trnd + T(R)*3*Tseq <
1200*Trnd + T(R)*Trnd +T(R)*3*Trnd = N1.
В случае использования доменов выражения для общего времени IO для планов 1 и 2
будут иметь вид:
N1 = 1200*Trnd + T(R)*T(S)/DOM(S,b)*Trnd = 1200*Trnd + T(R)*360000/200000*Trnd =
1200*Trnd +T(R)*1.8*Trnd,
N2 = 1200*Trnd + T(R)*Trnd + T(R)*(T(S)/(DOM(S,c)*100)-1)*Tseq =
1200*Trnd + T(R)*Trnd + T(R)*(360000/(200*100)-1)*Tseq =
1200*Trnd + T(R)*Trnd + T(R)*17*Tseq
Следовательно N2 < N1, если
T(R)*Trnd + T(R)*17*Tseq < T(R)*1.8*Trnd или
Tseq/Trnd < 4/85
Download