1.インデックス(索引)とは
インデックス(索引)はデータの検索を高速にするためのオブジェクトです。
インデックスが設定されていない表でデータを検索する場合、問合せの条件に従って、表の先頭のデータから1行ずつ検索していきますので、データが大量にある場合には相当の時間がかかります。インデックスを設定することによって、欲しいデータにピンポイントにアクセスできるため、検索を高速化できます。
Oracleでは、表を作成する時にPRIMARY KEY制約やUNIQUE制約を指定すると、 一意性の保証などの目的で、その列(または列の組み合わせ)に対して、 自動的に索引が作成されます。
2.インデックスガイドライン
・索引を作成した方がよい場合
大規模な表の、1%から15%程度の行を頻繁に検索する。
列の値が、比較的一意である
WHERE句の条件として、頻繁に使用される列である。
・索引を作成しない方がよい場合
列内に、異なる値がほとんどない(例えば、性別など)。
NULL値が多く、NULLでない値を検索しない。
表が小規模である。
・一般に、参照整合性制約で使用される外部キー列には、索引の作成を考えるべきです。
3.インデックス作成方法
インデックスは、テーブルの列(カラム)に対して設定します。
CREATE [UNIQUE] INDEX 索引名
ON 表名(列名 [,列名...] [ASC| DESC])
[VISIBLE | INVISIBLE];
以下の例では、employee表のname列に、index1という索引を作成しています。
CREATE INDEX index1
ON employee (name);
表の列にインデックスが設定されると、インデックスが設定された列の値と、その物理的な格納場所(ROWID)を登録します。
表に設定されたインデックスは、表に対してDML文を実行する度にメンテナンス(必要であれば更新)されます。
4.インデックスの削除
索引を削除するには、DROP INDEX文を使用します。
DROP INDEX文では削除する索引を指定します。
DROP INDEX 索引名
DROP INDEX index1;
5.インデックスの留意点
- インデックスのは1つの列に対してだけでなく、列の組み合わせに対しても作成できます。
- インデックスは検索条件にマッチするデータの件数が少ない場合に有効です。
- 1つの表に多数のインデックスを作成すると、表の行データ変更時の負荷が増加します。
- インデックスを定義した表が削除されると、そのインデックスも一緒に削除されます。
- インデックスを設定した表と、インデックスを別の表領域格納することができます。
- インデックスを設定した表と、インデックスを別のスキーマに格納することもできます。