インデックスを作成します。
構文
CREATE [ UNIQUE ] INDEX name ON table
( { column | ( expression ) } )
[ TABLESPACE tablespace ]
説明
CREATE INDEX は、指定されたテーブルにインデックス (名前) を作成します。 インデックスは、データベースのパフォーマンスを向上させるために使用されます。 ただし、適切に使用しないと、パフォーマンスが低下する可能性があります。
インデックスのキーフィールドは、列名または括弧で囲まれた式として指定されます。 複数列のインデックスを作成するために複数のフィールドを指定できます。
インデックスフィールドは、テーブル行の 1 つ以上の列の値から計算された式にすることができます。 この関数は、基本データの一部の変換に基づいて、迅速なデータアクセスに使用できます。
たとえば、UPPER(col) でインデックスを計算すると、WHERE
UPPER(col) = 'JIM'
句でインデックスを使用できます。
Oracle と互換性のある PolarDB データベースは、B ツリーインデックス方式を提供します。 B ツリーインデックス方式は、Lehman-Yao 高並行性 B ツリーの実装です。
インデックスは、デフォルトでは IS NULL 句に使用されません。
インデックス定義で使用されるすべての関数と演算子は不変でなければなりません。 結果は、引数にのみ依存し、別のテーブルの内容や現在の時刻などの外部の影響に依存することはありません。 この制限により、インデックスの動作が適切に定義されます。 インデックス式でユーザー定義関数を使用するには、作成時に関数を不変としてマークする必要があります。
パーティションテーブルにインデックスを作成する場合、CREATE INDEX コマンドはテーブルのパーティションにインデックスを伝達します。
パラメーター
パラメーター | 説明 |
---|---|
UNIQUE | データがすでに存在する場合にインデックスが作成されて時間データが追加されると、システムがテーブルの重複値をチェックます。 データを挿入または更新しようとすると、エントリが重複する場合、エラーが生成されます。 |
name | 作成するインデックスの名前。 インデックス名にスキーマ名を含めることはできません。 インデックスは常にその親テーブルと同じスキーマに作成されます。 |
table | インデックスを作成するテーブルの名前。 名前はスキーマで修飾できます。 |
column | テーブルの列の名前。 |
expression | テーブルの 1 つ以上の列に基づく式。 構文に示すように、ほとんどの場合、式は括弧で囲まれます。 ただし、式が関数ファンクションコール形式の場合は、括弧を省略できます。 |
tablespace | インデックスを作成するテーブルスペース。 このパラメーターが指定されていない場合、default_tablespace が使用されます。 default_tablespace が空の文字列の場合、データベースのデフォルトのテーブルスペースが使用されます。 |
例
emp テーブルの ename 列に B ツリーインデックスを作成します。
CREATE INDEX name_idx ON emp (ename);
上記と同じインデックスを作成しますが、index_tblspc テーブルスペースに配置します。
CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;