CREATE INDEXは索引(インデックス)を作成するSQL文である。索引を作成した列は、問い合わせの速度が速くなる。索引はスキーマオブジェクトである。

PRIMARY KEY制約を付けた列には自動的に索引が作成されます。したがって、PRIMARY KEY制約が付いた列に CREATE INDEX 文で明示的に索引を作成する必要はありません。

CREATE [UNIQUE|BITMAP] INDEX [schema.]index ON table (column [ASC|DESC] [,...])
UNIQUE

値が重複しない索引を作成する。

BITMAP

ビットマップ索引を作成する。BITMAP句を指定しない場合は、Bツリー索引を作成する。

表内の列の個別値の数を表内の行の合計数で割った値を カーディナリティ度 と呼ぶ。カーディナリティ度は、作成する索引の種別を判断する際に重要となる。カーディナリティ度の低い列にはビットマップ索引、カーディナリティ度の高い列にはBツリー索引を使用すると、索引のパフォーマンスが向上する。一般的に、カーディナリティ度が1%未満のときにはビットマップ索引を使用する。たとえば、性別を表す列の値は男と女の2種類であるから、200行以上の表で性別列に索引を作成する場合は、ビットマップ索引を使用した方が良い。

schema

インデックスを作成するスキーマを指定する。他ユーザのスキーマ内にインデックスを作成する場合は、CREATE ANY INDEXシステム権限が必要である。

スキーマの指定を省略した場合は、自分のスキーマ内にインデックスが作成される。

index

作成するインデックスの名前を指定する。

table

インデックスを作成する対象のテーブルを指定する。

column

インデックスを作成する対象の列を指定する。

ASC

昇順の索引を作成する。 ASC 句と DESC 句のいずれも指定しなかった場合は、昇順の索引が作成される。

DESC

降順の索引をが作成する。 ASC 句と DESC 句のいずれも指定しなかった場合は、昇順の索引が作成される。

SQL> CREATE INDEX empsalidx ON employee (salary);

ビットマップ索引を作成するSQL文の例を次に示す。

SQL> create bitmap index empindex on employees (gender);
スポンサーリンク