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

PolarDB:DML操作でのグローバルパーティション分割インデックススキャンの使用

最終更新日:May 24, 2024

パーティションテーブルにグローバルパーティションインデックスがある場合は、DELETEおよびUPDATEのDML操作でグローバルパーティションインデックススキャンを使用できます。

Usage

  • パーティションテーブルとグローバルパーティションインデックスの作成:
    
    (
        a int,
        b int,
        c intは常に (b * 2) として生成され、
        d intデフォルト0、
        e int,
        fテキスト、
        gテキスト
    ) 範囲によるパーティー (a)
    (
        パーティションp0の値が (50) 未満、
        パーティションp1の値が (100) 未満、
        パーティションp2の値が (200) 未満、
        パーティションp3の値が (300) 未満、
        パーティションp4の値が (400) 未満、
        パーティションp5の値が (500) 未満、
        パーティションp6の値が (600) 未満、
        パーティションp7の値が (700) 未満、
        パーティションp8の値が (800) 未満
    );
    
    INSERT INTO gi_ora(a、b、d、e、f、g) SELECT i、i、(random()* 1000)::int、(random()* 30000000)::int::text、(random()* 30000000)::int::text FROM generate_series(1,799) i;
    
    CREATE INDEX ON gi_ora(b) グローバルPARTITION BY RANGE (b)
    (
        パーティションgpi_p0の値が (500) 未満、
        パーティションgpi_p1の値が (maxvalue) 未満
    );
    分析gi_ora; 
  • 指定されたデータに対するDELETE操作でグローバルパーティション分割インデックススキャンを使用します。
    EXPLAIN (cost off, verbose on) DELETE FROM gi_ora WHERE b = 198;
    ---------------------------------------------------------------------------------------
    
     DELETE ON public.gi_ora
       -> グローバル参加インデックススキャン (1/2) gi_ora_b_tableoid_idx ON public.gi_ora
             出力: gi_ora.tableid, gi_ora.ctid
             Index Cond :( gi_ora.b = 198)
    (4行) 
  • 指定されたデータのUPDATE操作でグローバルパーティション分割インデックススキャンを使用します。
    EXPLAIN (cost off, verbose on) UPDATE gi_ora SET a = a - 10 WHERE b = 198;
    サンプル結果:
    クエリ計画
    ---------------------------------------------------------------------------------------
     UPDATE ON public.gi_ora
       -> グローバル参加インデックススキャン (1/2) gi_ora_b_tableoid_idx ON public.gi_ora
             出力: (gi_ora.a - 10), gi_ora.tableid, gi_ora.ctid
             Index Cond :( gi_ora.b = 198)
    (4行)