パーティション化されたテーブルは通常、膨大な量のデータを持ちます。 クエリを高速化するために、通常はインデックスが使用されます。 このトピックでは、パーティションテーブルのインデックスについて説明します。
インデックスタイプ
PolarDB for PostgreSQL のパーティションテーブルは、2つのインデックスタイプをサポートしています。
ローカルインデックス
パーティションテーブルでは、ローカルインデックスはパーティションに対応し、パーティションと同じ数と範囲を持ちます。 各インデックス付きパーティションは、親テーブル内のパーティションに関連付けられています。 したがって、インデックス付きパーティションのすべてのキーは、単一のパーティションに格納されている行のみを参照します。 したがって、インデックス付きパーティションは、関連するパーティションと自動的に同期され、互いに独立しています。
local
属性を指定してローカルインデックスを作成できます。 ローカルインデックスの場合、親テーブルと同じ数のパーティションまたはサブパーティションが作成されます。 これらのパーティションまたはサブパーティションは、親テーブルのパーティションと同じ範囲をカバーします。
PolarDB for PostgreSQL は、親テーブルのパーティションが追加、削除、マージ、または分割されたとき、またはハッシュパーティションまたはハッシュサブパーティションが追加またはマージされたときに、インデックス付きパーティションを自動的に保持します。
パーティションキー列がインデックス列のサブセットである場合、一意のローカルインデックスを作成して、同じインデックスキーを持つ行が常に同じパーティションにマップされるようにすることができます。
グローバルインデックス
グローバルインデックスは、親テーブルとは無関係に分割することもできるBツリーインデックスである。
グローバルインデックス付きパーティションは、親テーブル内のすべてのパーティションを指すことができます。 グローバルインデックスを分割することもできる。 そのパーティションキーは、インデックスキーのプレフィックスでなければなりません。
グローバルインデックスを持つことができるのは、パーティションテーブルのみです。 詳細については、「グローバルインデックス」をご参照ください。
構文
ローカルインデックスの作成
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USINGメソッド]
( { column_name | (式) } [ COLLATE照合順序] [ opclass [ ( opclass_parameter = value [, ...] ) ] ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...])
[含まれる (column_name [, ...] ) ]
[WITH ( storage_parameter [= value] [, ... ] ) ]
[TABLESPACE tablespace_name]
[どこ述語]
グローバルインデックスの作成
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name
( { column_name | (式) } [ COLLATE照合順序] [ opclass [ ( opclass_parameter = value [, ...] ) ] ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...]) グローバル
[WITH ( storage_parameter [= value] [, ... ] ) ]
[TABLESPACE tablespace_name ]
例
ローカルインデックスの作成
フィルムテーブルのタイトル列にローカルインデックスtitle_idxを作成します。
CREATE UNIQUE INDEX title_idx ON films (title);
グローバルインデックスの作成
filmsテーブルのtitle列にグローバルインデックスtitle_idxを作成します。
CREATE UNIQUE INDEX title_idx ON films (title) global;