*[DB] RDBMS
RDBMS
- RDBMSも他のアプリケーションと同じで、
・ファイル
・プロセス
・メモリ
からなる。
- RDBMSが他のアプリケーションと違う点
・巨大なファイルを扱う
・複数のユーザが同時に利用する
- 巨大なファイルを扱う、またそれを長期間保存する
→ハードディスクの物理的な制約を受ける
→性能を出すための工夫が必要
- 性能を引き出すために行われた工夫
→シークタイム(ヘッドの移動)、回転待ちタイムの短縮
→可能な限りディスクアクセスを減らす
→シーケンシャルにアクセスできるようにする(連続的にデータを記録)
-
- テーブルスキャンとソートスキャン
・テーブルスキャン テーブルのデータをそのままスキャン →トラックをまたがない限りアームを動かさなくて済む ・ソートスキャン メモリに展開する際にソート処理を行う →ソート処理のコストだけでなく、データ量によってはメモリに展開することに コストがかかる(スワップ) 並べ替えはORDER BYだけでなく、テーブルの結合など多くのケースで必要とされる
-
- NESTED LOOP JOIN(ネステッドループジョイン)とSORT MERGE JOIN(ソートマージジョイン)
- NESTED LOOP JOIN(ネステッドループジョイン)…1件読み込む度に、マージするもう一方を全件世読み込みマッチング処理を行う。リソースを必要としないが処理に時間がかかる。
- SORT MERGE JOIN(ソートマージジョイン)…マージする2つをあらかじめ、マッチングするキーでソートしてから、マッチング処理を行う。→マッチング処理は速いが、リソースを消費する。
- NESTED LOOP JOIN(ネステッドループジョイン)とSORT MERGE JOIN(ソートマージジョイン)
-
- インデックス
ソート済みの別表を保持し、SORT MERGE JOINの並び替えのコストを削減する。 1.ソート済みにインデックスをスキャンし、実データのポインタを取得する。 2.ポインタの示すデータを取得 ・インデックスの形式 B-Tree(バランスツリー) ・インデックスのトレードオフ レコードが追加、更新されるとインデックスも更新しないといけない。 インデックスを大量に作成するとレコードの更新にコストがかかる。