R3 午1 問2 設問1 (1)-e,(2)
ゆきさん
(No.1)
文章内容が理解できなかったので質問です。
5.索引はバッファヒット率100%、テーブルはバッファヒット率0%と仮定すれば~
とありますが、この索引とテーブルとは何を指しているのかがよくわからなかったです。
索引のバッファヒット率100%、テーブルのバッファヒット率0%の時と
索引のバッファヒット率100%、テーブルのバッファヒット率100%の時と
索引のバッファヒット率0%、テーブルのバッファヒット率100%の時で
どのような動きになるのか教えていただければ幸いです。
5.索引はバッファヒット率100%、テーブルはバッファヒット率0%と仮定すれば~
とありますが、この索引とテーブルとは何を指しているのかがよくわからなかったです。
索引のバッファヒット率100%、テーブルのバッファヒット率0%の時と
索引のバッファヒット率100%、テーブルのバッファヒット率100%の時と
索引のバッファヒット率0%、テーブルのバッファヒット率100%の時で
どのような動きになるのか教えていただければ幸いです。
2022.09.19 07:31
にゃんちゃんさん
★DB シルバーマイスター
(No.2)
前提となる情報をまとめます。
索引:索引を構成する列の値に対応するデータテーブルのレコード場所(ポインタ)をまとめたもの
索引, ポインタ
1001, 1
1002, 2
1003, 3
1004, 4
...
テーブル:この文脈では「レコードの集まり」
バッファ:欲しいデータをすぐ取り出せる場所
高速に読み書きできるが容量は小さい(キャッシュ・メモリなどとも呼ぶ)
ディスク:全データが保管されている場所
読み書きには時間がかかる(ディスクI/O時間)
システムの規模によりますが、ディスクが保持するデータは大容量になるため
そのすべてを保持できるバッファを用意するのは難しいです。
よって、バッファそのものの容量を増やす努力はするとしても
よく使うデータだけバッファに入れておく仕様になります。
*****************前提終わり*******************
①索引のバッファヒット率100%、テーブルのバッファヒット率0%
索引がバッファにすべて格納されています。
WHERE句で索引の列を条件にした場合
対応するポインタを、バッファの索引から調べます。
見つけたポインタをもとに、ディスクのテーブルから探します。
ディスクI/Oはテーブルのレコードのみ発生する。
②索引のバッファヒット率100%、テーブルのバッファヒット率100%
索引だけでなく、テーブルまるごとバッファに格納しています。
よって、このテーブルに関してはディスクとのやり取り(I/O)は発生しません。
バッファの索引でポインタを見つけて、バッファのテーブルから探索行を取り出します。
③索引のバッファヒット率0%、テーブルのバッファヒット率100%
このパターンは馴染みがないというか、テーブルまるごとバッファに入れる余裕があるなら
索引もバッファに入れて②と同じにしたらいいんじゃないかと思いますが・・・
憶測ですが、以下のような動きになるかと思います。
まずはディスクにアクセスして索引を見に行って、対応するポインタを見つけます。
その後、対応する行をバッファのテーブルから取り出します。
よって索引のみ、ディスクとやり取りすることになります(試験ではおそらくこの時間は考慮しない)
以上をまとめると、違いはディスクI/Oが発生するかどうかで
①はテーブルの探索行数分のI/Oが発生
②はI/O発生しない
③はポインタの情報のみI/Oが発生?
となります。
(補足や修正があれば、どなたかよろしくお願いします。)
索引:索引を構成する列の値に対応するデータテーブルのレコード場所(ポインタ)をまとめたもの
索引, ポインタ
1001, 1
1002, 2
1003, 3
1004, 4
...
テーブル:この文脈では「レコードの集まり」
バッファ:欲しいデータをすぐ取り出せる場所
高速に読み書きできるが容量は小さい(キャッシュ・メモリなどとも呼ぶ)
ディスク:全データが保管されている場所
読み書きには時間がかかる(ディスクI/O時間)
システムの規模によりますが、ディスクが保持するデータは大容量になるため
そのすべてを保持できるバッファを用意するのは難しいです。
よって、バッファそのものの容量を増やす努力はするとしても
よく使うデータだけバッファに入れておく仕様になります。
*****************前提終わり*******************
①索引のバッファヒット率100%、テーブルのバッファヒット率0%
索引がバッファにすべて格納されています。
WHERE句で索引の列を条件にした場合
対応するポインタを、バッファの索引から調べます。
見つけたポインタをもとに、ディスクのテーブルから探します。
ディスクI/Oはテーブルのレコードのみ発生する。
②索引のバッファヒット率100%、テーブルのバッファヒット率100%
索引だけでなく、テーブルまるごとバッファに格納しています。
よって、このテーブルに関してはディスクとのやり取り(I/O)は発生しません。
バッファの索引でポインタを見つけて、バッファのテーブルから探索行を取り出します。
③索引のバッファヒット率0%、テーブルのバッファヒット率100%
このパターンは馴染みがないというか、テーブルまるごとバッファに入れる余裕があるなら
索引もバッファに入れて②と同じにしたらいいんじゃないかと思いますが・・・
憶測ですが、以下のような動きになるかと思います。
まずはディスクにアクセスして索引を見に行って、対応するポインタを見つけます。
その後、対応する行をバッファのテーブルから取り出します。
よって索引のみ、ディスクとやり取りすることになります(試験ではおそらくこの時間は考慮しない)
以上をまとめると、違いはディスクI/Oが発生するかどうかで
①はテーブルの探索行数分のI/Oが発生
②はI/O発生しない
③はポインタの情報のみI/Oが発生?
となります。
(補足や修正があれば、どなたかよろしくお願いします。)
2022.09.19 22:30
ゆきさん
(No.3)
反応遅くなってすみません。
ご回答ありがとうございます。
ようやく索引とテーブルのバッファについて理解できました。
助かりました。
ご回答ありがとうございます。
ようやく索引とテーブルのバッファについて理解できました。
助かりました。
2022.09.27 21:55
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。