分區表Oracle提供了定界分割、散列分區、列表分區、組合分區4種分區的方法定界分割:按照列值範圍將資料分布到不同分區SQL> CREATE TABLE ran_tab ( 2 range_key_column date , 3 data varchar2(20) 4 ) 5 PARTITION BY RANGE (range_key_column) 6 ( PARTITION part_1 VALUES LESS THAN(to_date('01/01/2005','dd/mm/yyyy')), 7 PARTITION part_2 VALUES LESS THAN(to_date('01/01/2006','dd/mm/yyyy')) 8 ) 9 / 插入值SQL> insert into ran_tab(range_key_column,data) values(to_date('2005-05-01','yyyy-mm-dd'),'chifan');SQL> insert into ran_tab(range_key_column,data) values(to_date('2005-06-01','yyyy-mm-dd'),'chifan');查看分區SQL> select * from ran_tab partition(part_1); RANGE_KEY_COLUMN DATA---------------- --------------------2004-6-1 chifan2003-6-1 chifan SQL> select * from ran_tab partition(part_2); RANGE_KEY_COLUMN DATA---------------- --------------------2005-5-1 chifan2005-6-1 chifan 查看分區表SQL> select segment_name,partition_name,tablespace_name 2 from user_segments where segment_name='RAN_TAB'; SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME------------------- ----------- ------------------------------ --------------- RAN_TAB PART_1 USER02RAN_TAB PART_2 USER02增加分區SQL> alter table ran_tab add partition part_3 values less than (to_date('2007-01-01','yyyy-mm-dd')); Table altered刪除分區SQL> alter table ran_tab drop partition part_3; Table altered散列分區:對列進行hash演算法的分區,將資料均勻的分布到各個分區SQL> CREATE TABLE p_hash_emp 2 ( empno int, 3 ename varchar2(20) 4 ) 5 PARTITION BY HASH (empno) 6 ( partition part_1 tablespace users, 7 partition part_2 tablespace user02 8 ) 9 / Table created插入資料SQL> insert into p_hash_emp values(1,'a');SQL> insert into p_hash_emp values(2,'b');SQL> insert into p_hash_emp values(3,'c');SQL> insert into p_hash_emp values(4,'d');SQL> insert into p_hash_emp values(5,'de');查看SQL> select * from p_hash_emp partition(part_1); EMPNO ENAME--------------------------------------- -------------------- 2 b 5 de SQL> select * from p_hash_emp partition(part_2); EMPNO ENAME--------------------------------------- -------------------- 1 a 3 c 4 d添加分區SQL> alter table p_hash_emp add partition part_3;Table altered列表分區:將離散的資料有效部署到不同分區 SQL> create table region_emp( 2 deptno number, 3 dname varchar2(10) 4 ) 5 partition by list(dname) 6 (partition p1 values ('a'), 7 partition p2 values ('b','c'), 8 partition p3 values ('d','e') 9 ) 10 / Table createdSQL> insert into region_emp values(1,'a');SQL> insert into region_emp values(2,'b');SQL> insert into region_emp values(3,'e');SQL> select * from region_emp partition(p1); DEPTNO DNAME---------- ---------- 1 a SQL> select * from region_emp partition(p2); DEPTNO DNAME---------- ---------- 2 b SQL> select * from region_emp partition(p3); DEPTNO DNAME---------- ---------- 3 e分區表上建立索引對於分區表來說,每個表分區對應一個分區段,當在分區表上建立索引時既可以建立全域索引,也可以建立分區索引。如果建立全域索引,索引資料會存放到一個索引段中,如果建立分區索引,則索引資料會存放到幾個索引分割區段中去全域索引: 預設情況下載分區表上建立的索引索引全域索引,建立全域索引時也可以加參數global,當然預設就是這個值SQL> create index ind_a on ran_tab(range_key_column);Index createdSQL> create index ind_a on ran_tab(range_key_column) global;Index created兩句話意思一樣,只是前面省略預設參數分區索引:建立分區索引時,索引資料存放到幾個分區段中,分區索引是基於分區表建立的,不能基於普通表建立,並且分區個數與表的分區是完全對應的SQL> create index ind_a on ran_tab(range_key_column) local;Index created查看分區索引SQL> select partition_name,index_name from user_ind_partitions;PARTITION_NAME INDEX_NAME------------------------------ ------------------------------PART_1 IND_APART_2 IND_A