Вариант решения к домашнему заданию 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