本ページでは、インデックスの作成方法について説明します。

構文

CREATE [ UNIQUE ] INDEX name ON table
  ( { column | ( expression ) } )
  [ TABLESPACE tablespace ]

パラメーター

パラメーター 説明
UNIQUE データがすでに存在する場合に、データが追加されるたびに、インデックスが作成される際にシステムがテーブルの重複値をチェックします。 エントリが重複するデータを挿入または更新しようとすると、エラーが発生します。
name 作成するインデックスの名前。 ここにスキーマ名を含めることはできません。 インデックスは常にその親テーブルと同じスキーマに作成されます。
table インデックス化するテーブルの名前。 名前はスキーマで修飾できます。
column テーブルの列の名前。
expression テーブルの 1 つ以上の列に基づく式。 式は通常、構文で説明されているように、括弧で囲む必要があります。 ただし、式が関数呼び出しの形式である場合、括弧は省略できます。
tablespace インデックスを作成するテーブルスペース。 指定しない場合、default_tablespace が使用されます。 default_tablespace が空の文字列の場合、データベースのデフォルトのテーブルスペースが使用されます。

説明

CREATE INDEX は、指定されたテーブルにインデックスを作成します。 インデックスは、主にデータベースのパフォーマンスを向上させるために使用されます。

インデックスのキーフィールドは、列名として、または括弧で囲まれた式として指定されます。 複数列のインデックスを作成するために複数のフィールドを指定できます。

インデックスフィールドは、テーブル行の 1 つ以上の列の値から計算された式にすることができます。 この機能を使用すると、基本データの変換に基づいて、データに高速にアクセスできます。 たとえば、UPPER (col) で計算されたインデックスによって、WHERE UPPER(col) = 'JIM' 句がインデックスを使用することができるようになります。

Oracle と互換性のある POLARDB は、B-tree インデックス方式を提供します。 B-tree インデックス方式は、Lehman-Yao 高同時実行性 B-tree の実装です。

インデックスは、デフォルトでは IS NULL 句には使用されません。

インデックス定義で使用されるすべての関数と演算子は不変である必要があります。つまり、結果は引数にのみ依存し、別のテーブルの内容や現在の時間などの外部の影響に依存してはなりません。 この制限により、インデックスの動作が明確に定義されます。 インデックス式でユーザー定義関数を使用するには、必ず作成時に関数に不変のマークを付けてください。

パーティションテーブルにインデックスを作成する場合、CREATE INDEX 文はテーブルのサブパーティションにインデックスを伝達しません。
  • パーティション化されたルートの名前を指定すると、テーブルのパーティションとサブパーティションのすべてのインデックスが作成されます。
  • パーティション化されたバックアップテーブルの名前を指定すると、テーブルのパーティション内のサブパーティションのすべてのインデックスが作成されます。
  • サブパーティション化されたバックアップテーブルの名前を指定すると、テーブルのサブパーティションのインデックスのみが作成されます。
複数列のインデックスでは、最大 32 個のフィールドを指定できます。

テーブル emp の ename 列に B-tree インデックスを作成するには次を実行します。

CREATE INDEX name_idx ON emp (ename);

前のインデックスと同じインデックスを作成しますが、index_tblspc テーブルスペースに存在させるには次を実行します。

CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;