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)