在 RANGE 分区表中指定多分区键
通过指定 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
----------------------------------------------------------------------------
Append (cost=0.00..14.35 rows=1 width=250)
-> Seq Scan on sales_q3_2012 (cost=0.00..14.35 rows=1 width=250)
Filter: ((sale_year = '2012'::numeric) AND (sale_month = '8'::numeric))
(3 rows)
由于其 sale_month 列的值为 8 且 sale_year 列的值为 2012 的所有行都将存储在 q3_2012 分区中,因此 POLARDB for Oracle 将仅搜索该分区。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论