關於range partition 用到多列的一個小案例<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者:劉穎博
時間: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列是否滿足!
……………………………………………………………………………………