勉強前イメージ
検索しやすくする・・・みたいな感じだった気がする
調査
インデックス とは
索引という意味で、データベースのテーブルへの検索処理を高速させるものになります。
インデックスをはると、膨大なデータベースの中の特定データを検索する際にどこにそのデータが存在するかを短時間で特定できます。
テーブルとは別にインデックス用のデータとして作成され、テーブルとは別で管理されるイメージです。
インデックスの効果について
インデックスには効果として現れる場合と現れない場合があります。
効果として現れる場合の特徴は以下になります。
特にデータが多いとそもそも全文を検索しながら確認を行うようなもので遅くなります。
- データの行数が多い
- 検索対象の項目に値の重複や偏りが少ない
- 表の更新・追加等が少ない
現れづらいのは以下になります。
そもそもデータが少なかったらインデックスをはったとしても時間の差分はあまりない場合があります。
- データの行数が少ない
- 検索の際に表の殆どのデータを取得する
インデックスの種類
インデックスはいくつか種類がありますが、代表的なものは以下になります。
- Bツリーインデックス
木構造のインデックスでoracleのデフォルトのインデックスになります。
ルートノード・ブランチノード(※1)には関連付けられている子要素が持ってるキーの値のデータと位置情報が格納されています。
リーフノード(※2)にはキーの値とレコードの位置を示す位置情報が格納されています。
※1
ルートノード(親要素のないブロック)
ブランチノード(親要素・子要素どちらも持ってるブロック)
※2
リーフノード(子要素のないブロック)
- ビットマップインデックス
キーの値を含む行をビット1を立てて表すインデックスで、
ビット1が立っている行の格納位置を取得した後、取得した位置情報を使ってデータにアクセスします。
- ハッシュインデックス
Mysql等で使用されているインデックスで、
キーの値をハッシュ化した値をデータに格納し、検索の際にはハッシュ化したキーの値の場所に直接アクセスします。
勉強後イメージ
なんか前もちょっとやったような気もするけど出てこないので見てみた。
ルートノードとかも初めて知った。
どこに何があるか早く検索できるためだね。
よく使うSQLとかだったらインデックスはるのが効果的?