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

PolarDB:RANGEパーティションテーブルで複数のパーティションキー列を指定する

最終更新日:Jun 26, 2024

RANGEパーティションテーブルに複数のキー列を指定することで、パフォーマンスを向上させることができます。

少数の列セットに対して (より大きい値またはより小さい値に基づく) 比較演算子を使用して行を頻繁に選択する場合は、RANGEパーティション分割ルールでこれらの列を使用することを検討してください。

レンジパーティションテーブルで複数のキー列を指定する

レンジパーティションテーブル定義は、パーティションキーに複数の列を含むことができます。 範囲パーティション分割されたテーブルに複数のパーティションキー列を指定するには、partition BY range句:

CREATE TABLE sales
(
  dept_no     number,
  part_no     varchar2,
  country     varchar2(20),
  sale_year    number,
  sale_month   number,
  sale_day     number,
  amount      number
)
PARTITION BY RANGE(sale_year, sale_month)
(
  PARTITION q1_2012 
    VALUES LESS THAN(2012, 4),
  PARTITION q2_2012 
    VALUES LESS THAN(2012, 7),
  PARTITION q3_2012 
    VALUES LESS THAN(2012, 10),
  PARTITION q4_2012 
    VALUES LESS THAN(2013, 1)
);

テーブルに複数のパーティションキー列がある場合、テーブルをクエリするときに複数のキー値を指定して、パーティションプルーニングを最大限に活用する必要があります。

acctg=# EXPLAIN SELECT * FROM sales WHERE sale_year = 2012 AND sale_month = 8;
                                   QUERY PLAN                                
----------------------------------------------------------------------------- Result  (cost=0.00..14.35 rows=2 width=250)
   ->  Append  (cost=0.00..14.35 rows=2 width=250)
         ->  Seq Scan on sales  (cost=0.00..0.00 rows=1 width=250)
               Filter: ((sale_year = 2012::numeric) AND (sale_month = 8::numeric))
         ->  Seq Scan on sales_q3_2012 sales  (cost=0.00..14.35 rows=1 width=250)
               Filter: ((sale_year = 2012::numeric) AND (sale_month = 8::numeric))
(6 rows)

sale_month列の値が8で、sale_year列の値が2012であるすべての行は、q3_2012パーティションに格納されます。 は、このパーティションのみを検索します。