技術とか戦略とか

証券レガシーシステムを8年いじってから転職した普通の文系SEによるブログ。技術のみではなく趣味の戦略考察についても。

情報処理技術者試験対策「RDBMSのインデックス」

RDBMSの性能分析を依頼された、という個人的な理由で、RDBMSのインデックスについて記事にしていきたいと思います。
 
今回の記事では、情報処理技術者試験の出題範囲内で、要点を箇条書きで書きたいと思います。
実務で使うには+αの知識(主にRDBMS固有の知識)が必要になりますが、情報処理技術者試験の知識はその+αの知識を身に付ける上での土台になります。
 
----------------------
 
■インデックス全般の知識
 ・インデックスは、テーブルの検索を高速化する目的で用いる。
 ・インデックスは、検索条件として指定するカラムに対して設定する。
 ・テーブルのレコード数が少ない場合は、インデックスの効力が落ちる。
  (インデックスを使わずに上から愚直に走査した方が早い場合もある)
 ・インデックスには、レコードの挿入や更新や削除が遅くなるデメリットがある。
  (それらの操作を行う度にインデックスの再構成が発生するため)
  
■インデックスの種類と特徴
 ①B+木インデックス
  ・RDBMSで一般的に用いられるインデックスである。
   (情報処理技術者試験で「インデックス」と出たら、指定がない限りこれ)
  ・検索キー値を用いて二分検索を行うインデックスである。
  ・検索値が等しく分布している時に効果が高い。
 
   効果が高い例
   カラムの値,件数
   a                ,200
   b                ,200
   c                ,200
   d                ,200
   e                ,200
   f                ,200
 
   効果が低い例
   カラムの値,件数
   a                ,1200
   b                ,200
   c                ,0
   d                ,0
   e                ,0
   f                ,0
   
  ・少ない件数に絞り込めるカラムに設定すると効果が高い。
  
   効果が高い例
   一意な値が格納されるカラムに設定する(1件に絞り込める)
   
   効果が低い例
   カラム「性別」に設定する(半分ぐらいまでしか絞り込めない)
   
  ・BETWEEN句等の範囲検索で後述のビットマップインデックスより優れる。
  ・ORDER BY等のソートが必要な場合に優れる。
  ・NULL検索やNOT検索では効果を発揮できない。
  
 ②ビットマップインデックス
  ・検索キー値が持ち得る値をビットで保持し、それをレコード毎に保持する。
  ・持ち得る値が少ないカラムに設定するとB+木インデックスより効果が高い。
   (例えばカラム「性別」等。)
  ・AND/OR条件のみの検索ではB+木インデックスより効果が高い。
  ・NOT検索ではB+木インデックスより効果が高い。
  
 ③ハッシュインデックス
  ・検索キー値をハッシュ化したものをインデックスとして用いる。
   (ハッシュ化…特定のアルゴリズムにより不可逆の固定長の値にすること)
  ・一意な値を検索するのに向いている。
  ・データ量が増えても検索にかかる時間が変わらないと言われている。
   (正確には、データ量が増えるとハッシュ値の衝突が増え、時間が微増する)
  ・ワイルドカードを用いて検索する場合はB+木インデックスの方が良い。
  ・BETWEEN句等の範囲検索には適用できない。
  ・ORDER BY等のソートが必要な場合には適用できない。
 
----------------------
 
目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM