tip:關於range partition 用到多列的一個小案例

關於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列是否滿足!

 

……………………………………………………………………………………

感謝 jxc@花城

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章