R3 午1 問2 設問1  (1)-e,(2)

ゆきさん  
(No.1)
文章内容が理解できなかったので質問です。

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が発生?
となります。
(補足や修正があれば、どなたかよろしくお願いします。)
2022.09.19 22:30
ゆきさん  
(No.3)
反応遅くなってすみません。
ご回答ありがとうございます。

ようやく索引とテーブルのバッファについて理解できました。
助かりました。
2022.09.27 21:55

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop