** 关于 range partition ** ** 用到多列的一个小案例 **
** 作者:刘颖博 **
** 时间: 2003-12-29 **
** mail ** ** : [email protected] ** ** ,请指正 **
** 转载请注明出处及作者 **
** 1. ** ** 实践 **
首先建分区表
create table simng_part (
LATN_ID NUMBER(4) not null,
pname char(200),
MON_ID NUMBER(2) not null
)
PARTITION BY RANGE(LATN_ID,MON_ID)
(
PARTITION PART_A01 VALUES LESS THAN (2000, 2) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_A02 VALUES LESS THAN (2000, 3) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_A12 VALUES LESS THAN (2000,13) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_B01 VALUES LESS THAN (2003, 2) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_B02 VALUES LESS THAN (2003, 3) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_B12 VALUES LESS THAN (2003,13) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_D12 VALUES LESS THAN (2020,13) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000)
)
/
insert into simng_part values(2000,'a',1);
insert into simng_part values(2000,'a',2);
insert into simng_part values(2000,'a',3);
insert into simng_part values(2002,'a',1);
insert into simng_part values(2002,'a',3);
insert into simng_part values(2002,'a',9);
insert into simng_part values(2019,'a',1);
commit;
create table simng_part1 (
LATN_ID NUMBER(4) not null,
pname char(200),
MON_ID NUMBER(2) not null
)
PARTITION BY RANGE(mon_ID,latn_ID)
(
PARTITION PART_A01 VALUES LESS THAN ( 2,2000) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_B01 VALUES LESS THAN ( 2,2003) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_A02 VALUES LESS THAN ( 3,2000) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_B02 VALUES LESS THAN ( 3,2003) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_A12 VALUES LESS THAN (13,2000) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_B12 VALUES LESS THAN (13,2003) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000),
PARTITION PART_D12 VALUES LESS THAN (13,2020) TABLESPACE TBS_DATA PCTFREE 10 STORAGE(INITIAL 1024K NEXT 1024K MAXEXTENTS 2000)
)
/
insert into simng_part1 values(2000,'a',1);
insert into simng_part1 values(2000,'a',2);
insert into simng_part1 values(2000,'a',3);
insert into simng_part1 values(2002,'a',1);
insert into simng_part1 values(2002,'a',3);
insert into simng_part1 values(2002,'a',9);
insert into simng_part1 values(2019,'a',1);
commit;
** 2. ** ** 问题 **
先思考两个问题:
试问表 simng_part : PART_B01 分区中有几条记录。
试问表 simng_part1 : PART_A01 分区中有几条记录。
答案是:
latn_id name mon_id
第一个
2002 a 3
2002 a 1
2002 a 9
第二个
2000 a 1
2002 a 1
2019 a 1
查询如下:
SQL> select * from simng_part partition(PART_B01);
LATN_ID PNAME MON_ID
------- ------------- ----------------
2002 a 1
2002 a 3
2002 a 9
SQL> select * from simng_part1 partition(PART_A01);
LATN_ID PNAME MON_ID
------- ------------- ----------------
2000 a 1
2002 a 1
2019 a 1
** 3. ** ** 结论 **
关于 range partition 分区,
首先注意的是,分区不包含上限
同时
对于存在多个列来进行 range partition
遵循这个原则:
只要满足第n列条件,就放在这个分区,而不管第 n+1 列是否满足!
……………………………………………………………………………………
感谢 jxc@ 花城