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

PolarDB:パーティションテーブルのインデックス

最終更新日:May 30, 2025

パーティションテーブルには通常、膨大な量のデータが格納されています。クエリを高速化するために、通常はインデックスが使用されます。このトピックでは、パーティションテーブルのインデックスについて説明します。

インデックスタイプ

PolarDB for PostgreSQL (Oracle 互換) のパーティションテーブルは、2 つのインデックスタイプをサポートしています。

ローカルインデックス

パーティションテーブルでは、ローカルインデックスはパーティションに対応し、パーティションと同じ数と範囲を持ちます。インデックス付きの各パーティションは、親テーブルのパーティションに関連付けられています。したがって、インデックス付きパーティション内のすべてのキーは、単一のパーティションに格納されている行のみを参照します。そのため、インデックス付きパーティションは関連付けられたパーティションと自動的に同期され、互いに独立しています。

LOCAL 属性を指定することで、ローカルインデックスを作成できます。ローカルインデックスの場合、親テーブルと同じ数のパーティションまたはサブパーティションが作成されます。これらのパーティションまたはサブパーティションは、親テーブルと同じ範囲をカバーします。

PolarDB for PostgreSQL (Oracle 互換) は、親テーブルのパーティションが追加、削除、マージ、または分割された場合、あるいはハッシュパーティションまたはハッシュサブパーティションが追加またはマージされた場合に、インデックス付きパーティションを自動的に維持します。

パーティションキー列がインデックスキー列のサブセットである場合、一意のローカルインデックスを作成して、同じインデックスキーを持つ行が常に同じパーティションにマッピングされるようにすることができます。

グローバルインデックス

グローバルインデックスは B ツリーインデックスであり、親テーブルとは独立してパーティション化することもできます。

グローバルにインデックス付けされたパーティションは、親テーブルのすべてのパーティションを指すことができます。

説明

グローバルインデックスを持つことができるのは、パーティションテーブルのみです。詳細については、「グローバルインデックス」をご参照ください。

構文

ローカルインデックスを作成する

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ]
    ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass [ ( opclass_parameter = value [, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
    [ INCLUDE ( column_name [, ...] ) ]
    [ WITH ( storage_parameter [= value] [, ... ] ) ]
    [ TABLESPACE tablespace_name ]
    [ WHERE predicate ]

グローバルインデックスを作成する

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name
    ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass [ ( opclass_parameter = value [, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) GLOBAL 
    [ WITH ( storage_parameter [= value] [, ... ] ) ]
    [ TABLESPACE tablespace_name ]
説明

PolarDB for PostgreSQL (Oracle 互換) 2.0 では、CONCURRENTLY パラメーターを指定して、インデックスを同時に作成できます。

ローカルインデックスを作成する

films テーブルの title 列に title_idx という名前のローカルインデックスを作成します。

CREATE UNIQUE INDEX title_idx ON films (title);

グローバルインデックスを作成する

films テーブルの title 列に title_idx という名前のグローバルインデックスを作成します。

CREATE UNIQUE INDEX title_idx ON films (title) global;