PolarDB PostgreSQL版(兼容Oracle)支持在多级分区表上以及分区键上创建全局索引(Global Index)。
前提条件
PolarDB PostgreSQL版(兼容Oracle)的内核小版本需为20230930(v1.1.35)版本及以上。
注意事项
在多级分区中,Global Index只能创建在root table上(最顶级的分区表),不能创建在中间分区表。
在分区键上创建Global index不一定比分区键上的Local Index更高效。例如,等值查询,Local Index的性能应该优于Global Index;但是在hash分区上的分区键范围查询,Global Index依然优于Local Index。优化器会自动选择最优路径进行查询,但是数据库可以根据业务场景选择建立合适的Index,减轻优化器的工作。
示例
创建一张多级分区表。
CREATE TABLE sales ( dept_no number, part_no varchar2, country varchar2(20), date date, amount number ) PARTITION BY RANGE(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') ) );
在多级分区表上创建Global Index。
CREATE index sales_part_no_idx_global ON sales(part_no) global ; explain (costs off) SELECT * FROM sales WHERE part_no = '101'; QUERY PLAN ----------------------------------------------------------- Global Index Scan using sales_part_no_idx_global on sales Index Cond: ((part_no)::text = '101'::text)
在分区键上创建Global Index。
CREATE index sales_date_idx_global ON sales(date) global ; explain (costs off) SELECT * FROM sales WHERE date = '2012-08-01'; QUERY PLAN -------------------------------------------------------- Global Index Scan using sales_date_idx_global on sales Index Cond: (date = '01-AUG-12 00:00:00'::date)
文档内容是否对您有帮助?