もうすぐ試験があるので、インデックス作成に関する次の質問の解き方を知りたいです。
1.データベースは関係 R(A,B,C) から構成されます。A と B は整数 [0,10 000] (それぞれ 4B) で、C は varchar(20) (20B) です。リレーション R は 10^6 タプルで構成されます。ブロックサイズは 2048 B です。
A) B に B+ ツリー インデックスがあるかどうかを次のクエリに問い合わせた場合、読み取らなければならないブロックの数 (最善と最悪) は次のとおりです。
R から C を選択 A=100 および B=10
B) A にインデックスを付けるのは理にかなっていますか? はいの場合、どのタイプのインデックスが最適ですか?
別の同様の質問は次のとおりです。
2.データベースは、関係 R(A,B,C) から構成されます。A と B は整数 [0,10 000] で、C は varchar(150) です。リレーション R は 10^6 タプルで構成されます。ブロックサイズは 2048 B で、A、B がキーです。
A) 「 SELECT C FROM R WHERE A=4711 」というクエリを実行した場合、最良の場合と最悪の場合で、読み取らなければならないブロックの数は次のとおりです。
- インデックスはありません。
- A と B に B+ ツリー インデックスがあります。
b) A と B に 1 つのインデックスを付けるのではなく、B と A を別々にインデックス化することは理にかなっていますか? どのタイプのインデックスが最適ですか?
編集:
これが私がやったことです:
質問 1 A)
タプルのサイズ = 20+4+4=28 B
2048/28=73 タプル/ブロック切り捨て
10^6/73= リレーション全体で 13 699 ブロック、切り上げ
索引の読み: 4*n+4(n+1)<=2048 B => n=255 切り捨て
B+ツリーの最初のレベル= 255<10^6 いいえ
B+tree の第 2 レベル = 255*256<10^6 いいえ
B+tree の第 3 レベル = 255*256*257>10^6 はい、10^6 タプルは高さ 3 の B+tree に収まります。
Datareadings : A=100 の確率が 1/10001 で、B=10 の確率が同じであると仮定すると、次のようになります。
1/10001*1/10001*10^6 切り上げ = 1 タプル
最悪の場合と最良の場合: 1 タプル = 1 ブロック
次に、3+1 ブロック読み取りがあります
そうですか?
B)のやり方がわかりません。
そして、質問2の答え方が本当にわかりません..助けてください