分割槽表基礎介紹

wadekobe9發表於2011-06-16

分割槽表

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         chifan

2003-6-1         chifan

 

SQL> select * from ran_tab partition(part_2);

 

RANGE_KEY_COLUMN DATA

---------------- --------------------

2005-5-1         chifan

2005-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                         USER02

RAN_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 created

 

 

SQL> 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 created

 

SQL> 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_A

PART_2                         IND_A

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10678398/viewspace-700073/,如需轉載,請註明出處,否則將追究法律責任。

相關文章