<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
     

    本文出處:

    http://blog.csdn.net/tianlesoftware/archive/2009/10/23/4717318.aspx


           Oracle提供了分區技術以支持VLDB(Very Large DataBase)分區表通過對分區列的判斷,把分區列不同的記錄,放到不同的分區中。分區完全對應用透明。

           Oracle的分區表可以包括多個分區,每個分區都是一個獨立的段(SEGMENT),可以存放到不同的表空間中。查詢時可以通過查詢表來訪問各個分區中的數據,也可以通過在查詢時直接指定分區的方法來進行查詢。

     

    When to Partition a Table什么時候需要分區表,官網的2個建議如下:

    1Tables greater than 2GB should always be considered for partitioning.

    2Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.

     

    oracle 10g中最多支持:1024k-1個分區:

          Tables can be partitioned into up to 1024K-1 separate partitions

     

    聯機文檔上有關分區表和索引的說明:

          Partitioned Tables and Indexes

           http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/partconc.htm#sthref2604

     

    分區提供以下優點:

           1)由于將數據分散到各個分區中,減少了數據損壞的可能性;

           2)可以對單獨的分區進行備份和恢復;

           3)可以將分區映射到不同的物理磁盤上,來分散IO

           4)提高可管理性、可用性和性能。

     

    Oracle 10g提供了以下幾種分區類型:

           1)范圍分區(range);

           2)哈希分區(hash);

           3)列表分區(list);

           4)范圍-哈希復合分區(range-hash);

           5)范圍-列表復合分區(range-list)。

     

    Range分區:

      Range分區是應用范圍比較廣的表分區方式,它是以列的值的范圍來做為分區的劃分條件,將記錄存放到列值所在的range分區中。

           如按照時間劃分,20101月的數據放到a分區,2月的數據放到b分區,在創建的時候,需要指定基于的列,以及分區的范圍值。

           在按時間分區時,如果某些記錄暫無法預測范圍,可以創建maxvalue分區,所有不在指定范圍內的記錄都會被存儲到maxvalue所在分區中。

     

    如:

    create table pdba (id number, time date) partition by range (time)

    (

    partition p1 values less than (to_date('2010-10-1', 'yyyy-mm-dd')),

    partition p2 values less than (to_date('2010-11-1', 'yyyy-mm-dd')),

    partition p3 values less than (to_date('2010-12-1', 'yyyy-mm-dd')),

    partition p4 values less than (maxvalue)

    )

     

    Hash分區:

      對于那些無法有效劃分范圍的表,可以使用hash分區,這樣對于提高性能還是會有一定的幫助。hash分區會將表中的數據平均分配到你指定的幾個分區中,列所在分區是依據分區列的hash值自動分配,因此你并不能控制也不知道哪條記錄會被放到哪個分區中,hash分區也可以支持多個依賴列。

     

    如:

    create table test

    (

    transaction_id number primary key,

    item_id number(8) not null

    )

    partition by hash(transaction_id)

    (

    partition part_01 tablespace tablespace01,

    partition part_02 tablespace tablespace02,

    partition part_03 tablespace tablespace03

    );

    在這里,我們指定了每個分區的表空間。

     

    List分區:

      List分區也需要指定列的值,其分區值必須明確指定,該分區列只能有一個,不能像range或者hash分區那樣同時指定多個列做為分區依賴列,但它的單個分區對應值可以是多個。

      在分區時必須確定分區列可能存在的值,一旦插入的列值不在分區范圍內,則插入/更新就會失敗,因此通常建議使用list分區時,要創建一個default分區存儲那些不在指定范圍內的記錄,類似range分區中的maxvalue分區。

     

    在根據某字段,如城市代碼分區時,可以指定default,把非分區規則的數據,全部放到這個default分區。

     

    如:

    create table custaddr
    (

      id                     varchar2(15 byte)   not null,

      areacode   varchar2(4 byte)
     )

    partition by list (areacode)
    ( partition t_list025 values ('025'),  
     partition t_list372 values ('372') , 
     partition t_list510 values ('510'), 

    partition p_other values (default)

    )

     

    組合分區:

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

      組合分區呢在10g中有兩種:range-hashrange-list。注意順序,根分區只能是range分區,子分區可以是hash分區或list分區。

     

    如:

    create table test

    (

    transaction_id number primary key,

    transaction_date date

    )

    partition by range(transaction_date) subpartition by hash(transaction_id)

    subpartitions 3 store in (tablespace01,tablespace02,tablespace03)

    (

    partition part_01 values less than(to_date(’2009-01-01’,’yyyy-mm-dd’)),

    partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’)),

    partition part_03 values less than(maxvalue)

    );

     

    create table emp_sub_template (deptno number, empname varchar(32), grade number)  

         partition by range(deptno) subpartition by hash(empname)

         subpartition template

             (subpartition a tablespace ts1,

              subpartition b tablespace ts2,

              subpartition c tablespace ts3,

              subpartition d tablespace ts4

             )

        (partition p1 values less than (1000),

         partition p2 values less than (2000),

         partition p3 values less than (maxvalue)

        );

     

     

    create table quarterly_regional_sales

          (deptno number, item_no varchar2(20),

           txn_date date, txn_amount number, state varchar2(2))

      tablespace ts4

      partition by range (txn_date)

        subpartition by list (state)

          (partition q1_1999 values less than (to_date('1-apr-1999','dd-mon-yyyy'))

             (subpartition q1_1999_northwest values ('or', 'wa'),

              subpartition q1_1999_southwest values ('az', 'ut', 'nm'),

              subpartition q1_1999_northeast values ('ny', 'vm', 'nj'),

              subpartition q1_1999_southeast values ('fl', 'ga'),

              subpartition q1_1999_northcentral values ('sd', 'wi'),

              subpartition q1_1999_southcentral values ('ok', 'tx')

             ),

           partition q2_1999 values less than ( to_date('1-jul-1999','dd-mon-yyyy'))

             (subpartition q2_1999_northwest values ('or', 'wa'),

              subpartition q2_1999_southwest values ('az', 'ut', 'nm'),

              subpartition q2_1999_northeast values ('ny', 'vm', 'nj'),

              subpartition q2_1999_southeast values ('fl', 'ga'),

              subpartition q2_1999_northcentral values ('sd', 'wi'),

              subpartition q2_1999_southcentral values ('ok', 'tx')

             ),

           partition q3_1999 values less than (to_date('1-oct-1999','dd-mon-yyyy'))

             (subpartition q3_1999_northwest values ('or', 'wa'),

              subpartition q3_1999_southwest values ('az', 'ut', 'nm'),

              subpartition q3_1999_northeast values ('ny', 'vm', 'nj'),

              subpartition q3_1999_southeast values ('fl', 'ga'),

              subpartition q3_1999_northcentral values ('sd', 'wi'),

              subpartition q3_1999_southcentral values ('ok', 'tx')

             ),

           partition q4_1999 values less than ( to_date('1-jan-2000','dd-mon-yyyy'))

             (subpartition q4_1999_northwest values ('or', 'wa'),

              subpartition q4_1999_southwest values ('az', 'ut', 'nm'),

              subpartition q4_1999_northeast values ('ny', 'vm', 'nj'),

              subpartition q4_1999_southeast values ('fl', 'ga'),

              subpartition q4_1999_northcentral values ('sd', 'wi'),

              subpartition q4_1999_southcentral values ('ok', 'tx')

             )

          );

     

     

           Oracle 11g中,組合分區功能這塊有所增強,又增加了range-range,list-range,

    list-list,list-hash,并且 11g里面還支持Interval分區和虛擬列分區。

    posted on 2012-07-22 00:53 HUIKK 閱讀(315) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 国产亚洲av片在线观看播放| 日韩特黄特色大片免费视频| 久久这里只精品热免费99| EEUSS影院WWW在线观看免费| 在线播放国产不卡免费视频 | 国产精品无码一二区免费| 中文字幕无码不卡免费视频| 99热在线精品免费全部my| 91免费资源网站入口| 毛色毛片免费观看| 精品久久洲久久久久护士免费 | 国内精品免费久久影院| 免费看无码特级毛片| 三年片在线观看免费大全电影| 99爱在线精品视频免费观看9 | 爱情岛论坛亚洲品质自拍视频网站| 亚洲AV无码成人网站在线观看| 亚洲av午夜电影在线观看| 色多多A级毛片免费看| 99视频在线免费观看| 91精品国产免费网站| 国产在线a免费观看| 精品剧情v国产在免费线观看| 免费va在线观看| 亚洲香蕉网久久综合影视| 亚洲国产精品自在在线观看| 亚洲国产精品久久丫| 亚洲美国产亚洲AV| eeuss影院ss奇兵免费com| 久久免费精品视频| 国产免费久久精品99re丫y| 国产无遮挡又黄又爽免费视频| 一本色道久久88综合亚洲精品高清| 国产亚洲精品a在线观看| 久久国产亚洲精品无码| 亚洲精品av无码喷奶水糖心| 一级一看免费完整版毛片| 少妇人妻偷人精品免费视频| 在线观看人成网站深夜免费| 国产亚洲精久久久久久无码AV| 亚洲电影在线播放|