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

PolarDB:マルチレベルパーティションテーブルにグローバルインデックスを作成する

最終更新日:Jan 23, 2025

PolarDB for PostgreSQL (Compatible with Oracle) では、マルチレベルのパーティションテーブルとパーティションキーにグローバルインデックスを作成できます。

前提条件

PolarDB for PostgreSQL (Oracle互換) クラスターのリビジョンバージョンはV1.1.35以降です。

使用上の注意

  • グローバルインデックスは、マルチレベルのパーティションテーブルのルートテーブルにのみ作成できます。 サブパーティションにグローバルインデックスを作成することはできません。

  • パーティションキーで作成された場合、グローバルインデックスは常にローカルインデックスよりも優れているとは限りません。 たとえば、HASH分割テーブルに対する範囲クエリの場合、グローバルインデックスはローカルインデックスよりも優れていますが、等価クエリの場合、ローカルインデックスはグローバルインデックスよりも優れています。 オプティマイザは、より効率的なインデックスを自動的に選択します。 ビジネスシナリオに基づいてクエリに使用するインデックスを手動で指定して、オプティマイザのワークロードを軽減することもできます。

  1. マルチレベルのパーティションテーブルを作成します。

    テーブルの販売を作成する
    (
      dept_no number,
      part_no varchar2,
      country varchar2(20),
      date date,
      金額番号
    )
    範囲によるパーティー (日付)
      SUBPARTITION BY LIST(country)
      (
        PARTITION q1_2012
          VALUES LESS THAN('2012-Apr-01')
          (
            SUBPARTITION q1_europe VALUES ('FRANCE', 'ITALY'),
            SUBPARTITION q1_asia VALUES ('INDIA', 'PAKISTAN'),
            SUBPARTITION q1_americas VALUES ('US', 'CANADA')
          ),
      PARTITION q2_2012
        VALUES LESS THAN('2012-Jul-01')
          (
            SUBPARTITION q2_europe VALUES ('FRANCE', 'ITALY'),
            SUBPARTITION q2_asia VALUES ('INDIA', 'PAKISTAN'),
            SUBPARTITION q2_americas VALUES ('US', 'CANADA')
          ),
      PARTITION q3_2012
        VALUES LESS THAN('2012-Oct-01')
          (
            SUBPARTITION q3_europe VALUES ('FRANCE', 'ITALY'),
            SUBPARTITION q3_asia VALUES ('INDIA', 'PAKISTAN'),
            SUBPARTITION q3_americas VALUES ('US', 'CANADA')
          ),
      PARTITION q4_2012
        VALUES LESS THAN('2013-Jan-01')
          (
            SUBPARTITION q4_europe VALUES ('FRANCE', 'ITALY'),
            SUBPARTITION q4_asia VALUES ('INDIA', 'PAKISTAN'),
            SUBPARTITION q4_americas VALUES ('US', 'CANADA')
          )
    );
  2. マルチレベルパーティションテーブルにグローバルインデックスを作成します。

    CREATEインデックスsales_part_no_idx_global ON sales(part_no) global;
    
    説明 (コストオフ) SELECT * FROM sales WHERE part_no = '101';
                            クエリ計画
    -----------------------------------------------------------
     sales_part_no_idx_globalを使用したグローバルインデックススキャン
       Index Cond :( (part_no)::text = '101'::text) 
  3. パーティションキーにグローバルインデックスを作成します。

    CREATEインデックスsales_date_idx_global ON sales(date) global;
    
    説明 (コストオフ) SELECT * FROM sales WHERE date = '2012-08-01 ';
                           クエリ計画
    --------------------------------------------------------
     sales_date_idx_globalを使用したグローバルインデックススキャン
       インデックス: (date = '01-AUG-12 00:00:00 '::date)