Home » database » INDEX(インデックス)のメカニズム

INDEX(インデックス)のメカニズム

INDEX(インデックス)のメカニズムを理解する

INDEX(インデックス:索引)はデータベースでは最も重要な検索機構です。インデックスの構造・メカニズムを理解することで、パフォーマンスチューニングに役立てることができます

 

インデックス(INDEX)の種類

INDEX(インデックス:索引)には大きく2種類あります。B-TREE(B木)方式とBITMAP(ビットマップ)方式です。一般的にINDEX(インデックス:索引)と言った場合はB-TREE(B木)方式を指します

 

B-TREE(B木)方式のINDEX(インデックス:索引)の処理

以下はB-TREE(B木)方式のINDEX(インデックス:索引)の処理イメージです。B-TREE(B木)方式とは二分探査方式です。二分探査とは対象データの中間値と大小比較して、小さい場合は次の中間値(ブランチ値)と比較して最終的なデータ(リーフブロックの中の値)に到達するというものです。順次検索より早く目的の値を探査できる方式です。

index-mechanism-btree

 

1.ルート(幹)の値と比較する

SQL(SELECT文)が実行されっるとルート(幹)の値と比較します。この例ではCODEがインデックスになっていてCODEが51のものを検索しています。よって100より小さいので左側のブランチ(枝)に飛びます

2.ブランチ(枝)の値と比較する

次にブランチ(枝)の値と大小比較します。ブランチ(枝)の階層が多くなっても同じことを繰り返します

3.リーフブロック(葉)に到達する

ブランチ(枝)がなくなると探索対象インデックスのリーフブロック(葉)に到達します。そしてリーフブロックの中の該当インデックスのROWIDからデータを取り出します

 

B-TREE(B木)INDEX(インデックス:索引)の弱点

しかしB-TREE(B木)インデックスにも弱点があります。B-TREE(B木)インデックスは、キーとなるデータの種類(これをカーディナリティと言う)が少ない場合には役に立たちません。例えば、性別のような「男」と「女」しかデータの種類がないものをB-TREE(B木)方式のインデックスにしても効果はありません

 

BITMAP(ビットマップ)方式のインデックス

B-TREE(B木)INDEX(インデックス:索引)の弱点を補完したのがBITMAP(ビットマップ)方式のインデックスです。但し、OracleのBITMAPインデックスが使えるのはEnterprize版のみで、それもオプションです

index-mechanism-bitmap

 

INDEX(インデックス:索引)の神話

INDEX(インデックス:索引)を過信しないようにしましょう。INDEX(インデックス:索引)を作れば処理が早くなる確証はありません。詳細は「索引(インデックス)の断片化の確認方法の中の索引(インデックス)を過信しない」を参照ください

 

3 thoughts on “INDEX(インデックス)のメカニズム

Comments are closed.