すべてのプロダクト
Search
ドキュメントセンター

PolarDB:CREATE INDEX

最終更新日:Sep 26, 2024

インデックスを作成します。

構文

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

説明

CREATE INDEX は、指定されたテーブルにインデックス (名前) を作成します。 インデックスは、データベースのパフォーマンスを向上させるために使用されます。 ただし、適切に使用しないと、パフォーマンスが低下する可能性があります。

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

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

PolarDB for PostgreSQL (Oracleと互換) は、Bツリーインデックスメソッドを提供します。 B ツリーインデックス方式は、Lehman-Yao 高並行性 B ツリーの実装です。

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

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

パーティションテーブルにインデックスを作成する場合、CREATE INDEX コマンドはテーブルのパーティションにインデックスを伝達します。

説明

複数列のインデックスには、最大 32 個のフィールドを指定できます。

パラメーター

パラメーター

説明

UNIQUE

データがすでに存在する場合にインデックスが作成されて時間データが追加されると、システムがテーブルの重複値をチェックます。 データを挿入または更新しようとすると、エントリが重複する場合、エラーが生成されます。

name

作成するインデックスの名前。 インデックス名にスキーマ名を含めることはできません。 インデックスは常にその親テーブルと同じスキーマに作成されます。

table

インデックスを作成するテーブルの名前。 名前はスキーマで修飾できます。

column

テーブルの列の名前。

expression

テーブルの 1 つ以上の列に基づく式。 構文に示すように、ほとんどの場合、式は括弧で囲まれます。 ただし、式が関数ファンクションコール形式の場合は、括弧を省略できます。

例:

emp テーブルの ename 列に B ツリーインデックスを作成します。

CREATE INDEX name_idx ON emp (ename);

上記と同じインデックスを作成しますが、index_tblspc テーブルスペースに配置します。

CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;
説明

特権アカウントの場合、インデックスを格納するテーブルスペースをステートメントに指定できますが、オブジェクトは引き続きpg_defaultテーブルスペースに格納されます。 この挙動をユーザに知らせるメッセージが返されます。 この機能は、通常のアカウントではサポートされません。