Oracle基礎 表分區

來源:互聯網
上載者:User

標籤:...   code   partition   表名   www   span   記錄   包含   使用   

Oracle基礎 表分區

一、表分區

  (一)表分區的分類

    1、定界分割(range)

    2、散列分區(hash)

    3、列表分區(list)

    4、複合分區:範圍-雜湊(range-hash)、範圍-列表(range-list)

  (二)定界分割:

  定界分割是應用範圍比較廣的分區方式,它是以列的值得範圍來作為分區的劃分條件,將記錄存放到列值所在的range分區中。

  例:按照時間建立表分區。

--建立表時建立分區表CREATE TABLE drawlist(    drawname VARCHAR2(20),    drawtime DATE NOT NULL)PARTITION BY range(drawtime)(  --建立表分區,以drawtime為分區範圍          PARTITION part_1 VALUES LESS THAN (to_date(‘2010-1-1‘,‘yyyy-mm-dd‘)),  --定義2010-1-1以前的資料儲存的分區,不包括2010-1-1                    PARTITION part_2 VALUES LESS THAN (to_date(‘2011-1-1‘,‘yyyy-mm-dd‘)),  --定義2011-1-1以前的資料分區                    PARTITION part_3 VALUES LESS THAN (to_date(‘2012-1-1‘,‘yyyy-mm-dd‘)),                    PARTITION part_4 VALUES LESS THAN (maxvalue)   --其他的值儲存的分區)--插入資料,系統會自動將資料儲存到對應的分區表中。INSERT INTO drawlistSELECT ‘aaa‘,to_date(‘2009-10-20‘,‘yyyy-mm-dd‘) FROM dual UNION SELECT ‘bbb‘,to_date(‘2009-11-20‘,‘yyyy-mm-dd‘) FROM dual UNION SELECT ‘ccc‘,to_date(‘2009-12-20‘,‘yyyy-mm-dd‘) FROM dual UNION SELECT ‘ddd‘,to_date(‘2010-10-20‘,‘yyyy-mm-dd‘) FROM dual UNION SELECT ‘eee‘,to_date(‘2010-10-20‘,‘yyyy-mm-dd‘) FROM dual UNION SELECT ‘fff‘,to_date(‘2011-10-20‘,‘yyyy-mm-dd‘) FROM dual UNION SELECT ‘ggg‘,to_date(‘2012-10-20‘,‘yyyy-mm-dd‘) FROM dual --查詢分區表SELECT * FROM drawlist PARTITION (part_1);SELECT * FROM drawlist PARTITION (part_2);SELECT * FROM drawlist PARTITION (part_3);SELECT * FROM drawlist PARTITION (part_4);

 

  (三)散列分區:

  對於那些無法有效劃分範圍的表,可以使用hash分區。hash分區會將資料平均的分配到指定的幾個分區表中,由於資料被平均分配到不同的分區,減少查詢時對資料區塊的競爭,這樣對於提高效能還是會有一些協助,列所在的分區是一句分區列的hash值自動分配,因此不能控制,也不知道哪條記錄被放到哪個分區中,hash分區也可以支援多個依賴咧。建立散列分區最好使用2的冥次個分區表。比如2,4,8,16等。

  例:

--建立表CREATE TABLE drawlist(    draw_id NUMBER,    draw_name VARCHAR2(20))--建立散列分區PARTITION BY HASH(draw_name)(    PARTITION p1 TABLESPACE USERS,        PARTITION p2 TABLESPACE USERS,        PARTITION p3 TABLESPACE USERS,        PARTITION p4 TABLESPACE USERS);--產生1000行資料--查詢各個分區表中的資料。SELECT COUNT(*) FROM drawlist PARTITION (p1);SELECT COUNT(*) FROM drawlist PARTITION (p2);SELECT COUNT(*) FROM drawlist PARTITION (p3);SELECT COUNT(*) FROM drawlist PARTITION (p4);

 

  (四)列表分區:

  列表分區也需要指定列的值,其分區必須明確指定,該分區列只能有一個,不能像range或hash分區那樣同時指定多個列作為分區依賴列,但它的單個分區對應值可以是多個。使用列表分區,必須確定分區列可能存在的值,一旦插入的列值不在分區範圍內,則插入/更新就會失敗,因此通常建議使用list分區時,要建立一個default分區儲存哪些不在指定範圍內的記錄,類似range分區中的maxvalue分區。  

CREATE TABLE area(    CODE NUMBER,        NAME VARCHAR2(20))--建立列表分區PARTITION BY LIST(CODE)(     PARTITION p1 VALUES(10,20,30),  --指定當code值為10,20,30為第一分區         PARTITION p2 VALUES(40,50,60),  --指定當code值為40,50,60為第二分區         PARTITION p_other VALUES(DEFAULT)  --其他值為第三分區)select * from area PARTITION (p1);select * from area PARTITION (p2);select * from area PARTITION (p_other);

 

  

  (五)複合分區

  如果某表按照某列分區之後仍然較大,或者有一些其他的需求,還可以通過分區內再建子分區的方式將分區再分區,即組合分區的方式。

  組合分區分為:

  1、範圍-雜湊(range-hash)

  文法:

  PARTITION BY RANGE (列1) SUBPARTITION BY HASH(列2)(

    PARTITION 分區名 VALUES LESS THAN (值)

    TABLESPACE 資料表空間

  )

  

  2、範圍-列表(range-list)

  文法:  

  PARTITION BY RANGE (列1) SUBPARTITION BY LIST(列2)(

    PARTITION 分區名 VALUES LESS THAN (值) 

    TABLESPACE 資料表空間(

      SUBPARTITION 子分區名 VALUES(列表指定值...) TABLESPACE 資料表空間

    )

  )

 

二、分區維護

  1、增加分區

  文法:

  ALTER TBALE 表名 ADD PARTITION 分區表名 VALUES LESS THAN(值)

  例如:  

--增加區間分區ALTER TABLE drawlist ADD PARTITION p3 VALUES LESS THEN to_date(‘2013-1-1‘,‘yyyy-mm-dd‘) TABLESPACE USERS;--注意:插入的區間資料值不能小於原有的分區表的值。如果包含了maxvalues,必須刪除原有分區表

 

  2、刪除分區

  文法:

  ALTER TABLE 表名 DROP PARTITION 分區表名

  例:

--刪除區間分區ALTER TABLE drawlist DROP PARTITION p3 --刪除分區表後,分區表中的資料也會一同刪除

 

  3、截斷分區

  刪除當前分區中的資料,但是它並不會影響其他分區。

  文法:

  ALTER TABLE 表名 TRUNCATE PARTITION 分區表名

   例:

--階段分區表P3,清除分區表中的資料ALTER TABLE drawlist TRUNCATE PARTITION p3 

 

  4、合并分區

  將兩個分區表中的資料合併到一個分區,被合并的分區將不複存在。注意:高界線的分區不能合并到低界線的分區中。比如將小於2009年的資料合併到小於2010年的分區中,反過來則不行。

  文法:

  ALTER TABLE 表名 MERGE PARTITIONS 分區表1,分區表2 INTO  PARTITION 分區表2

  例:

--將分區表p1合并到分區表p2ALTER TABLE drawlist MERGE PARTITIONS p1,p2 INTO PARTITION p2

 

Oracle基礎 表分區

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.