创建全局分区索引¶
GLOBAL PARTITION … expr_list…中的expr_list最多可以包含32列。expr_list必须是索引键的左前缀集合。假设A集合有N个元素,B集合有M个元素,如果A是B的前缀,那么必须满足如下条件: 1)N一定要小于等于M; 2)A集合现有的N个元素的序列,一定要与B集合的前N个元素的序列相同。 例如索引健为(a,b,c),那么全局索引分区健则可以是(a,b,c)、(a,b)或者(a),而不可以是(a,c)、(b,c)、(c)或者(b,a)。全局分区索引只支持范围分区和哈希分区两种分区方式。
示例1:范围分区表全局分区索引¶
下面是创建全局分区索引举例,在此例中每个索引分区单独命名,但是存储在索引的默认表空间。
-- 清理环境
DROP TABLE ts;
DROP INDEX pti;
-- 创建分区表
CREATE TABLE ts
( id NUMERIC(6),
time_id DATE);
-- 创建全局分区索引
CREATE INDEX pti ON ts(id , time_id)
GLOBAL PARTITION BY RANGE(id)
(
PARTITION p_10 VALUES LESS THAN (10),
PARTITION p_20 VALUES LESS THAN (20),
PARTITION p_others VALUES LESS THAN (maxvalue)
);
-- 删除表和索引
DROP INDEX pti;
DROP TABLE ts CASCADE;
示例2:哈希分区表全局分区索引¶
用于创建一个哈希分区的全局分区索引的语法类似于用于哈希分区表。
-- 清理环境
DROP TABLE tab;
DROP INDEX pti;
DROP TABLESPACE ts1;
DROP TABLESPACE ts2;
-- 创建表空间
CREATE TABLESPACE ts1 DATAFILE 'ts1.dt' SIZE 5M AUTOEXTEND ON NEXT 5M;
CREATE TABLESPACE ts2 DATAFILE 'ts2.dt' SIZE 5M AUTOEXTEND ON NEXT 5M;
-- 创建表
CREATE TABLE tab(c1 int, c2 int, c3 int);
-- 创建全局分区索引
CREATE INDEX pti ON tab (c1,c2,c3) GLOBAL
PARTITION BY HASH (c1,c2)
(
PARTITION p1 TABLESPACE ts1,
PARTITION p2 TABLESPACE ts2
);
-- 删除表和索引
DROP INDEX pti;
DROP TABLE tab CASCADE;
DROP TABLESPACE ts1;
DROP TABLESPACE ts2;