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

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

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

    本站不再更新,歡迎光臨 java開發技術網
    隨筆-230  評論-230  文章-8  trackbacks-0
    在大量業務數據處理的項目中,可以考慮使用分區表來提高應用系統的性能并方便數據管理,本文詳細介紹了分區表的使用。

      在大型的企業應用或企業級的數據庫應用中,要處理的數據量通常可以達到幾十到幾百GB,有的甚至可以到TB級。雖然存儲介質和數據處理技術的發展也很快,但是仍然不能滿足用戶的需求,為了使用戶的大量的數據在讀寫操作和查詢中速度更快,Oracle提供了對表和索引進行分區的技術,以改善大型應用系統的性能。

      使用分區的優點:

      ·增強可用性:如果表的某個分區出現故障,表在其他分區的數據仍然可用;

      ·維護方便:如果表的某個分區出現故障,需要修復數據,只修復該分區即可;

      ·均衡I/O:可以把不同的分區映射到磁盤以平衡I/O,改善整個系統性能;

      ·改善查詢性能:對分區對象的查詢可以僅搜索自己關心的分區,提高檢索速度。

      Oracle數據庫提供對表或索引的分區方法有三種:

      ·范圍分區

      ·Hash分區(散列分區)

      ·復合分區

      下面將以實例的方式分別對這三種分區方法來說明分區表的使用。為了測試方便,我們先建三個表空間。

    create tablespace dinya_space01
    datafile ’/test/demo/oracle/demodata/dinya01.dnf’ size 50M
    create tablespace dinya_space01
    datafile ’/test/demo/oracle/demodata/dinya02.dnf’ size 50M
    create tablespace dinya_space01
    datafile ’/test/demo/oracle/demodata/dinya03.dnf’ size 50M

      1.1. 分區表的創建

      1.1.1. 范圍分區

      范圍分區就是對數據表中的某個值的范圍進行分區,根據某個值的范圍,決定將該數據存儲在哪個分區上。如根據序號分區,根據業務記錄的創建日期進行分區等。

      需求描述:有一個物料交易表,表名:material_transactions。該表將來可能有千萬級的數據記錄數。要求在建該表的時候使用分區表。這時候我們可以使用序號分區三個區,每個區中預計存儲三千萬的數據,也可以使用日期分區,如每五年的數據存儲在一個分區上。

      根據交易記錄的序號分區建表:

    SQL> create table dinya_test
    2 (
    3 transaction_id number primary key,
    4 item_id number(8) not null,
    5 item_description varchar2(300),
    6 transaction_date date not null
    7 )
    8 partition by range (transaction_id)
    9 (
    10 partition part_01 values less than(30000000) tablespace dinya_space01,
    11 partition part_02 values less than(60000000) tablespace dinya_space02,
    12 partition part_03 values less than(maxvalue) tablespace dinya_space03
    13 );
    Table created.

       建表成功,根據交易的序號,交易ID在三千萬以下的記錄將存儲在第一個表空間dinya_space01中,分區名為:par_01,在三千萬到六千萬之間的記錄存儲在第二個表空間:

      dinya_space02中,分區名為:par_02,而交易ID在六千萬以上的記錄存儲在第三個表空間dinya_space03中,分區名為par_03.

      根據交易日期分區建表:

    SQL> create table dinya_test
    2 (
    3 transaction_id number primary key,
    4 item_id number(8) not null,

    5 item_description varchar2(300),
    6 transaction_date date not null
    7 )
    8 partition by range (transaction_date)
    9 (
    10 partition part_01 values less than(to_date(’2006-01-01’,’yyyy-mm-dd’))
    tablespace dinya_space01,
    11 partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’))
    tablespace dinya_space02,
    12 partition part_03 values less than(maxvalue) tablespace dinya_space03
    13 );
    Table created.

      這樣我們就分別建了以交易序號和交易日期來分區的分區表。每次插入數據的時候,系統將根據指定的字段的值來自動將記錄存儲到制定的分區(表空間)中。

      當然,我們還可以根據需求,使用兩個字段的范圍分布來分區,如partition by range ( transaction_id ,transaction_date), 分區條件中的值也做相應的改變,請讀者自行測試。

      1.1.2. Hash分區(散列分區)

      散列分區為通過指定分區編號來均勻分布數據的一種分區類型,因為通過在I/O設備上進行散列分區,使得這些分區大小一致。如將物料交易表的數據根據交易ID散列地存放在指定的三個表空間中:

    SQL> create table dinya_test
    2 (
    3 transaction_id number primary key,
    4 item_id number(8) not null,
    5 item_description varchar2(300),
    6 transaction_date date
    7 )
    8 partition by hash(transaction_id)
    9 (
    10 partition part_01 tablespace dinya_space01,
    11 partition part_02 tablespace dinya_space02,
    12 partition part_03 tablespace dinya_space03
    13 );
    Table created.

      建表成功,此時插入數據,系統將按transaction_id將記錄散列地插入三個分區中,這里也就是三個不同的表空間中。

      1.1.3. 復合分區

      有時候我們需要根據范圍分區后,每個分區內的數據再散列地分布在幾個表空間中,這樣我們就要使用復合分區。復合分區是先使用范圍分區,然后在每個分區內再使用散列分區的一種分區方法,如將物料交易的記錄按時間分區,然后每個分區中的數據分三個子分區,將數據散列地存儲在三個指定的表空間中:

    SQL> create table dinya_test
    2 (
    3 transaction_id number primary key,
    4 item_id number(8) not null,
    5 item_description varchar2(300),
    6 transaction_date date
    7 )
    8 partition by range(transaction_date)subpartition by hash(transaction_id)
    9 subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)
    10 (
    11 partition part_01 values less than(to_date(’2006-01-01’,’yyyy-mm-dd’)),
    12 partition part_02 values less than(to_date(’2010-01-01’,’yyyy-mm-dd’)),
    13 partition part_03 values less than(maxvalue)
    14 );
    Table created.

      該例中,先是根據交易日期進行范圍分區,然后根據交易的ID將記錄散列地存儲在三個表空間中
    posted on 2008-07-15 17:03 有貓相伴的日子 閱讀(380) 評論(2)  編輯  收藏 所屬分類: pl/sql

    評論:
    # re: 分區表例子[未登錄] 2008-08-28 17:59 | x
    http://dbadiary.spaces.live.com/blog/cns!A3ECB1FE1E761C58!1264.entry  回復  更多評論
      
    本站不再更新,歡迎光臨 java開發技術網
    主站蜘蛛池模板: a级毛片免费全部播放无码| 国产成人va亚洲电影| 18禁在线无遮挡免费观看网站| 国产成人免费网站在线观看| 亚洲日韩亚洲另类激情文学| 日韩av无码成人无码免费| 亚洲av无码电影网| 巨胸喷奶水视频www网免费| 亚洲午夜无码毛片av久久京东热| 最近免费中文字幕4| 亚洲成A人片在线播放器| 真实乱视频国产免费观看| 亚洲AV无码专区在线电影成人| 午夜网站免费版在线观看| 色窝窝亚洲av网| 久久影视综合亚洲| 久久青草91免费观看| 亚洲av永久综合在线观看尤物 | 中文字幕视频免费在线观看| 亚洲婷婷五月综合狠狠爱| 久久午夜夜伦鲁鲁片免费无码| 亚洲欧洲校园自拍都市| 午夜两性色视频免费网站| 无码日韩人妻AV一区免费l| 亚洲AV无码专区国产乱码电影 | 亚洲国产精久久久久久久| 亚洲免费网站在线观看| 亚洲国产美女精品久久久| 在线亚洲精品福利网址导航| 99热这里只有精品免费播放| 亚洲综合无码无在线观看| 亚洲av再在线观看| 亚洲免费闲人蜜桃| 亚洲精品9999久久久久无码 | 毛片在线免费视频| 一级毛片人与动免费观看| 337p欧洲亚洲大胆艺术| 免费国产综合视频在线看| 成全视频免费观看在线看| 亚洲人成人无码.www石榴| 亚洲一区无码中文字幕|