虚谷数据库-分区及二级分区

一级分区

哈希分区方式

哈希分区是根据数据列的哈希值进行分区的技术。具体来说,根据哈希算法计算数据列的哈希值,并将具有相同哈希值的数据行分配到同一个分区中。哈希分区适用于高并发、均衡访问的环境,能够将数据均匀地分布到不同的分区中。

下面是虚谷数据哈希分区的示例:

create table hash_table1(a int,name varchar) partition by hash(a) partitions(p1,p2);

insert into hash_table1 values(1,'小王')(2,'小花')(10,'小明')(100,'小玲');

select * from hash_table1;

select * from hash_table1 partition(p1);

select * from hash_table1 partition(p2);

范围分区方式

范围分区是根据指定的范围对数据进行分区的技术。根据某个列的值范围(如时间、ID等),将数据按照指定的范围划分到不同的分区中。范围分区适用于按照特定的顺序进行查询的场景,例如按时间范围查询。

下面是虚谷数据库范围分区的示例:

CREATE TABLE range_table1(id INTEGER IDENTITY(1,2),name VARCHAR,city VARCHAR)
    PARTITION BY RANGE(id) PARTITIONS
    (part1 VALUES LESS THAN (1),
    part2 VALUES LESS THAN (1000),
    part3 VALUES LESS THAN (1500),
    part4 VALUES LESS THAN (2000),
    part5 VALUES LESS THAN (MAXVALUES));

insert into range_table1 values(10,'小王','成都');
insert into range_table1 values(1005,'小玲','重庆');
insert into range_table1 values(1585,'小宇','昆明');
insert into range_table1 values(2054,'小欢','上海');
insert into range_table1 values(6200,'小雅','南京');
insert into range_table1 values(0,'小双','北京');

select * from range_table1;
select * from range_table1 partition(part1);
select * from range_table1 partition(part2);

列表分区方式

列表分区是根据指定的值列表对数据进行分区的技术。根据某个列的值在一个预先定义的列表中进行匹配,将数据行分配到相应的分区中。列表分区适用于根据某个列的取值进行分类查询的场景,例如根据地区将数据进行分区。

下面是虚谷数据库列表分区的示例:

create table list_table1(a int,name varchar) partition by list(name) partitions(p1 values('TEST1'),p values('TEST2'));


insert into list_table1 values(1,'TEST1')(22,'TEST2')(33,'TEST1')(44,'TEST2');


select * from list_table1;

select * from list_table1 partition(p1);

select * from list_table1 partition(p);

二级分区

范围-范围分区

--范围--范围(一级分区是范围分区,二级分区也是范围分区)

create table range_range (c1 int , c2 int) partition by range(c1) partitions
(range_range_01 VALUES less than(10),
 range_range_02 VALUES less than(20),
 range_range_03 VALUES less than(30),
 range_range_04 VALUES less than(MAXVALUES)) SUBPARTITION BY range(c2) SUBPARTITIONS
(range_range_01_01 VALUES less than('10'),range_range_01_02 VALUES less than(MAXVALUES));

范围-列表分区

--范围--列表(一级分区是范围分区,二级分区是列表分区)

CREATE TABLE range_list (c1 NUMBER,c2 varchar) PARTITION BY RANGE (c1) partitions
(range_list_01 VALUES less than(10),
 range_list_02 VALUES less than(20),
 range_list_03 VALUES less than(30),
 range_list_04 VALUES less than(MAXVALUES))
 SUBPARTITION BY LIST(c2) SUBPARTITIONS
    ( range_list_01_01 VALUES ('重庆'),
      range_list_01_02 VALUES ('四川'),
      range_list_01_03 VALUES ('江苏'));

--插入数据
insert into range_list values(1,'四川');
insert into range_list values(28,'江苏');
insert into range_list values(35,'四川');
insert into range_list values(15,'重庆');
--查询数据
select * from  range_list;
select * from  range_list PARTITION(range_list_01);
select * from  range_list SUBPARTITION(range_list_01_01);
select * from  range_list SUBPARTITION(range_list_01_02);

范围-哈希分区

--范围--哈希(一级分区是范围分区,二级分区是哈希分区)

drop TABLE if EXISTS range_hash;
CREATE TABLE  range_hash(c1 NUMBER,c2 int)
PARTITION BY RANGE (c2) partitions
(range_hash_01 VALUES less than(10),
 range_hash_02 VALUES less than(20),
 range_hash_03 VALUES less than(30),
 range_hash_04 VALUES less than(MAXVALUES))
 SUBPARTITION BY hash(c1) SUBPARTITIONS 
(range_hash_01_01,
range_hash_01_02);

--插入数据
insert into range_hash values(1,6); 
insert into range_hash values(2,8); 
insert into range_hash values(3,33); 
insert into range_hash values(4,28); 
insert into range_hash values(2,26); 
insert into range_hash values(3,13);

--查询数据
select * from  range_hash;
select * from  range_hash PARTITION(range_hash_01);
select * from  range_hash SUBPARTITION(range_hash_01_01);
select * from  range_hash SUBPARTITION(range_hash_01_02);

列表-列表分区

--列表--列表(一级分区是列表分区,二级分区也是列表分区)

drop table list_list;
create table list_list (c1 int, c2 char(20), c3 varchar  ,c4 date)
partition by list (c2) partitions
(list_list_01 VALUES ('aaaa'),('bbbb'),
list_list_02 VALUES ('cccc'),('dddd'),
list_list_03 VALUES ('eeee'),('ffff'),
list_list_04 VALUES ('gggg'),('hhhh'))
SUBPARTITION BY LIST (C1) SUBPARTITIONS 
(list_list_01_01 VALUES ('1'),('3'),
list_list_01_02 VALUES ('2'),('4'),
list_list_01_03 VALUES ('5'),('6'));

--插入数据,执行如下SQL命令
insert into list_list values(1, 'aaaa', 'b', '2012-1-1');
insert into list_list values(2, 'aaaa', 'b', '2012-1-1');
insert into list_list values(3, 'aaaa', 'b', '2012-1-1');
insert into list_list values(4, 'aaaa', 'b', '2012-1-1');
insert into list_list values(5, 'cccc', 'b', '2012-1-1');
insert into list_list values(6, 'hhhh', 'b', '2012-1-1'); 

--查询数据
select * from list_list;
select * from list_list partition(list_list_01) union all select * from list_list partition(PART1);
select * from list_list SUBPARTITION(list_list_01_01) union all select * from list_list SUBPARTITION(SUBPART1);
select * from list_list SUBPARTITION(list_list_01_02) union all select * from list_list SUBPARTITION(SUBPART2);

列表-范围分区

--列表--范围(一级分区是列表分区,二级分区是范围分区)

drop table list_range;
create table list_range (c1 int, c2 char(20), c3 varchar  ,c4 date)
partition by list (c2) partitions
(list_range_01 VALUES ('aaaa'),('bbbb'),
list_range_02 VALUES ('cccc'),('dddd'),
list_range_03 VALUES ('eeee'),('ffff'),
list_range_04 VALUES ('gggg'),('hhhh'))
SUBPARTITION BY RANGE(c1) SUBPARTITIONS 
(list_range_01_01 VALUES less than ('3'),
list_range_01_02 VALUES less than (MAXVALUES));

--插入数据,执行如下SQL命令
insert into list_range values(1, 'aaaa', 'b', '2012-1-1');
insert into list_range values(2, 'aaaa', 'b', '2012-1-1');
insert into list_range values(3, 'aaaa', 'b', '2012-1-1');
insert into list_range values(4, 'aaaa', 'b', '2012-1-1');
insert into list_range values(5, 'cccc', 'b', '2012-1-1');
insert into list_range values(6, 'hhhh', 'b', '2012-1-1');

--查询数据
select * from list_range;
select * from list_range partition(list_range_01) union all select * from list_range partition(PART1);
select * from list_range SUBPARTITION(list_range_01_01);
select * from list_range SUBPARTITION(list_range_01_02);

列表-哈希分区

--列表--哈希(一级分区是列表分区,二级分区也是哈希分区)

drop table list_hash;
create table list_hash (c1 int, c2 char(20), c3 varchar  ,c4 date)
partition by list (c2) partitions
(list_hash_01 VALUES ('aaaa'),('bbbb'),
list_hash_02 VALUES ('cccc'),('dddd'),
list_hash_03 VALUES ('eeee'),('ffff'),
list_hash_04 VALUES ('gggg'),('hhhh'))
SUBPARTITION BY hash(c1) SUBPARTITIONS 
(list_hash_01_01,
list_hash_01_02);
--插入数据,执行如下SQL命令
insert into list_hash values(1, 'aaaa', 'b', '2012-1-1');
insert into list_hash values(2, 'aaaa', 'b', '2012-1-1');
insert into list_hash values(3, 'aaaa', 'b', '2012-1-1');
insert into list_hash values(4, 'aaaa', 'b', '2012-1-1');
insert into list_hash values(5, 'cccc', 'b', '2012-1-1');
insert into list_hash values(6, 'hhhh', 'b', '2012-1-1');
--查询数据
select * from list_hash;
select * from list_hash partition(list_hash_01) union all select * from list_hash partition(PART1);
select * from list_hash SUBPARTITION(list_hash_01_01) where c2 in ('aaaa','bbbb');
select * from list_hash SUBPARTITION(list_hash_01_02) where c2 in ('aaaa','bbbb');

哈希分区暂不支持子分区

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值