*[DB] RDBMS

RDBMS
  • RDBMSも他のアプリケーションと同じで、

・ファイル
・プロセス
・メモリ
からなる。

  • RDBMSが他のアプリケーションと違う点

・巨大なファイルを扱う
・複数のユーザが同時に利用する

  • 巨大なファイルを扱う、またそれを長期間保存する

→ハードディスクの物理的な制約を受ける
→性能を出すための工夫が必要

  • 性能を引き出すために行われた工夫

→シークタイム(ヘッドの移動)、回転待ちタイムの短縮
→可能な限りディスクアクセスを減らす
→シーケンシャルにアクセスできるようにする(連続的にデータを記録)

    • テーブルスキャンとソートスキャン
・テーブルスキャン
  テーブルのデータをそのままスキャン
    →トラックをまたがない限りアームを動かさなくて済む
・ソートスキャン
  メモリに展開する際にソート処理を行う
    →ソート処理のコストだけでなく、データ量によってはメモリに展開することに
      コストがかかる(スワップ)

並べ替えはORDER BYだけでなく、テーブルの結合など多くのケースで必要とされる

    • NESTED LOOP JOIN(ネステッドループジョイン)とSORT MERGE JOIN(ソートマージジョイン)
      • NESTED LOOP JOIN(ネステッドループジョイン)…1件読み込む度に、マージするもう一方を全件世読み込みマッチング処理を行う。リソースを必要としないが処理に時間がかかる。
      • SORT MERGE JOIN(ソートマージジョイン)…マージする2つをあらかじめ、マッチングするキーでソートしてから、マッチング処理を行う。→マッチング処理は速いが、リソースを消費する。
    • インデックス
    ソート済みの別表を保持し、SORT MERGE JOINの並び替えのコストを削減する。

    1.ソート済みにインデックスをスキャンし、実データのポインタを取得する。
    2.ポインタの示すデータを取得

    ・インデックスの形式
    B-Tree(バランスツリー)

    ・インデックスのトレードオフ
    レコードが追加、更新されるとインデックスも更新しないといけない。
    インデックスを大量に作成するとレコードの更新にコストがかかる。