はじめに
データベースの求められる性能を支える重要な技術、インデックスについて解説します。「なぜ使うのか」「どう使うのか」に焦点を当て、インデックスの基本概念から実践的な利用方法までを解説します。
インデックスとは?
いわゆる「索引」です。本や辞書に「あいうえお順」や「アルファベット順」にまとめた索引があるかと思いますが、DBにも同様の機能があります。
RDBも特定のルールで並べられている場合、インデックスを使えば検索時間を短縮することができます。
インデックスは以下のような特徴を持つ表で効果が現れやすいです。
・行数が多い
・検索対象の項目に値の重複、偏りが少ない
・表の更新・追加・削除が少ない
一方以下のような表では効果が現れにくくなります。
・行数が少ない
・表のほとんどの行を取得する
インデックスの使い方
前提としてインデックスは特定のカラムに貼るものです。
インデックスの作成方法
/* CREATE INDEX [インデックス名] ON [テーブル名](カラム名); */
CREATE INDEX IDX_MYNUMBER ON users(my_number);
複数のカラムを一つとしてインデックスを貼ることができます。これを複合インデックスと呼びます
/* CREATE INDEX [インデックス名] ON [テーブル名](カラム名1,カラム名2); */
CREATE INDEX IDX_MYNUMBER ON users(my_number, name);
インデックスの削除方法
/* DROP INDEX [インデックス名] ON [テーブル名]; */
CREATE INDEX IDX_MYNUMBER ON users;
どのカラムにインデックスを貼るべきか
WHERE・JOIN・ORDER BYでよく指定されるカラムに貼るのが望ましいです。
※主キー、外部キーには自動的にインデックスが貼られます
インデックス利用の注意点
インデックスを増やしすぎると、データ書き込み(update、insertなど)の際にインデックスの更新も行うため、パフォーマンスが下がることがあります。
使用するクエリに対して、本当にインデックスが必要かを評価することが大切です。
終わりに
インデックスは、データ検索性能の向上や一意性保証に起立活举する重要な技術です。しかし、その利用にはコストやメリットを完全に考える必要があります。本記事が、インデックスの基本概念を理解する上での参考になれば幸いです。
参考記事