indexとは
本の索引のようなものである。
- 特定の単語を検索するとき
- 1ページ目から → 時間がかかり、非効率的
- 索引から探す → 直接該当のページへ飛べるため、効率的
indexによるパフォーマンス改善の理由
- アプリケーションのコードに影響を与えない
インデックスを使うかどうかはDBMSが判断する
→ インデックスさえ作成しておけば良いため、アプリケーションプログラムに影響を与えない - テーブルのデータに影響を与えない
インデックスを作成することで
- テーブルに格納するデータ
- テーブルの構造
いずれも影響を受けない
→ インデックスを作成するときに論理設計を修正するような手戻りを考えなくて良い
3. 性能効果が大きい
インデックスの性能はデータ量に対して線形よりも緩く、劣化しない
indexのメリット・デメリット
(例) B-treeインデックス
メリット
- 平衡木の構造をしているため、探索を同じ計算量で行える
- B-treeの木の高さは「平べったい」木であるため、データ量が増えても性能が劣化しにくい
- データの挿入、更新、削除のいずれのコストも探索と同等である
- B-treeではキー値をソートするため、等号に限らず不等号やBETWEENといった検索の条件に対しても高速化を可能とする
- B-treeではソートをしてから構築するため、使用する際にはソート処理をスキップすることが可能(ソート処理はかなりコストが高い演算である)
デメリット
- データ量が少ないとフルスキャンと処理時間が変わらない
- インデックスが作成されている列値に変更があると、インデックス内に保持している値も更新しなければならない
- テーブルのデータが更新されると長期的には構造が崩れて性能が劣化してしまうため、定期的なメンテナンスが必要
まとめ
インデックスは検索をすることがあるデータに対してはかなりの性能を発揮することを知った。
しかし、便利な反面デメリットもあるためDB設計の際にはインデックスが必要かどうかまず考えてから作成することが大事である。