本ページでは、インデックスの作成方法について説明します。
構文
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'
句がインデックスを使用することを可能にすることができます。
PolarDBはB-tree indexメソッドを提供します。 B ツリーインデックス方式は、Lehman-Yao 高並行性 B ツリーの実装です。
インデックスは、デフォルトでは 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;
polar_superuserユーザーとしてステートメントを実行する場合は、インデックスを格納するテーブルスペースを指定できます。 ただし、インデックスはpg_defaultテーブルスペースに保存されたままで、対応するメッセージが返されます。 この機能は、通常のユーザーではサポートされません。