日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Oracle數據庫中分區表的操作方法詳解

瀏覽:296日期:2023-11-12 16:01:17
摘要:在大量業務數據處理的項目中,可以考慮使用分區表來提高應用系統的性能并方便數據治理,本文具體介紹了分區表的使用。 在大型的企業應用或企業級的數據庫應用中,要處理的數據量通常可以達到幾十到幾百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 50M1.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將記錄散列地存儲在三個表空間中。 1.2. 分區表操作 以上了解了三種分區表的建表方法,下面將使用實際的數據并針對按日期的范圍分區來測試分區表的數據記錄的操作。 1.2.1. 插入記錄: 以下為引用的內容: SQL> insert into dinya_test values(1,12,’BOOKS’,sysdate); 1 row created. SQL> insert into dinya_test values(2,12, ’BOOKS’,sysdate+30); 1 row created. SQL> insert into dinya_test values(3,12, ’BOOKS’,to_date(’2006-05-30’,’yyyy-mm-dd’)); 1 row created. SQL> insert into dinya_test values(4,12, ’BOOKS’,to_date(’2007-06-23’,’yyyy-mm-dd’)); 1 row created. SQL> insert into dinya_test values(5,12, ’BOOKS’,to_date(’2011-02-26’,’yyyy-mm-dd’)); 1 row created. SQL> insert into dinya_test values(6,12, ’BOOKS’,to_date(’2011-04-30’,’yyyy-mm-dd’)); 1 row created. SQL> commit; Commit complete. SQL>按上面的建表結果,2006年前的數據將存儲在第一個分區part_01上,而2006年到2010年的交易數據將存儲在第二個分區part_02上,2010年以后的記錄存儲在第三個分區part_03上。 1.2.2. 查詢分區表記錄: 以下為引用的內容: SQL> select * from dinya_test partition(part_01); TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE 1 12 BOOKS 2005-1-14 14:19: 2 12 BOOKS 2005-2-13 14:19: SQL> SQL> select * from dinya_test partition(part_02); TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE 3 12 BOOKS 2006-5-30 4 12 BOOKS 2007-6-23 SQL> SQL> select * from dinya_test partition(part_03); TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE 5 12 BOOKS 2011-2-26 6 12 BOOKS 2011-4-30 SQL>從查詢的結果可以看出,插入的數據已經根據交易時間范圍存儲在不同的分區中。這里是指定了分區的查詢,當然也可以不指定分區,直接執行select * from dinya_test查詢全部記錄。 在也檢索的數據量很大的時候,指定分區會大大提高檢索速度。 1.2.3. 更新分區表的記錄: 以下為引用的內容: SQL> update dinya_test partition(part_01) t set t.item_description=’DESK’ where t.transaction_id=1; 1 row updated. SQL> commit; Commit complete. SQL>這里將第一個分區中的交易ID=1的記錄中的item_description字段更新為“DESK”,可以看到已經成功更新了一條記錄。但是當更新的時候指定了分區,而根據查詢的記錄不在該分區中時,將不會更新數據,請看下面的例子: 以下為引用的內容: SQL> update dinya_test partition(part_01) t set t.item_description=’DESK’ where t.transaction_id=6; 0 rows updated. SQL> commit; Commit complete. SQL>指定了在第一個分區中更新記錄,但是條件中限制交易ID為6,而查詢全表,交易ID為6的記錄在第三個分區中,這樣該條語句將不會更新記錄。 1.2.4. 刪除分區表記錄: 以下為引用的內容: SQL> delete from dinya_test partition(part_02) t where t.transaction_id=4; 1 row deleted. SQL> commit; Commit complete. SQL>上面例子刪除了第二個分區part_02中的交易記錄ID為4的一條記錄,和更新數據相同,假如指定了分區,而條件中的數據又不在該分區中時,將不會刪除任何數據。 1.3. 分區表索引的使用: 分區表和一般表一樣可以建立索引,分區表可以創建局部索引和全局索引。當分區中出現許多事務并且要保證所有分區中的數據記錄的唯一性時采用全局索引。 1.3.1. 局部索引分區的建立: 以下為引用的內容: SQL> create index dinya_idx_t on dinya_test(item_id) 2 local 3 ( 4 partition idx_1 tablespace dinya_space01, 5 partition idx_2 tablespace dinya_space02, 6 partition idx_3 tablespace dinya_space03 7 ); Index created. SQL>看查詢的執行計劃,從下面的執行計劃可以看出,系統已經使用了索引: 以下為引用的內容: SQL> select * from dinya_test partition(part_01) t where t.item_id=12; Execution Plan 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=187) 1 0 TABLE Access (BY LOCAL INDEX ROWID) OF ’DINYA_TEST’ (Cost= 2 Card=1 Bytes=187) 2 1 INDEX (RANGE SCAN) OF ’DINYA_IDX_T’ (NON-UNIQUE) (Cost=1 Card=1) Statistics 0 recursive calls 0 db block gets 4 consistent gets 0 physical reads 0 redo size 334 bytes sent via SQL*Net to client 309 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 2 rows processed SQL>1.3.2. 全局索引分區的建立 全局索引建立時global 子句答應指定索引的范圍值,這個范圍值為索引字段的范圍值: 以下為引用的內容: SQL> create index dinya_idx_t on dinya_test(item_id) 2 global partition by range(item_id) 3 ( 4 partition idx_1 values less than (1000) tablespace dinya_space01, 5 partition idx_2 values less than (10000) tablespace dinya_space02, 6 partition idx_3 values less than (maxvalue) tablespace dinya_space03 7 ); Index created. SQL>本例中對表的item_id字段建立索引分區,當然也可以不指定索引分區名直接對整個表建立索引,如: 以下為引用的內容: SQL> create index dinya_idx_t on dinya_test(item_id); Index created. SQL>同樣的,對全局索引根據執行計劃可以看出索引已經可以使用: 以下為引用的內容: SQL> select * from dinya_test t where t.item_id=12; Execution Plan 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=3 Bytes=561) 1 0 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF ’DINYA_TEST’ (Cost =2 Card=3 Bytes=561) 2 1 INDEX (RANGE SCAN) OF ’DINYA_IDX_T’ (NON-UNIQUE) (Cost=1 Card=3) Statistics 5 recursive calls 0 db block gets 10 consistent gets 0 physical reads 0 redo size 420 bytes sent via SQL*Net to client 309 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 3 sorts (memory) 0 sorts (disk) 5 rows processed SQL>1.4. 分區表的維護: 了解了分區表的建立、索引的建立、表和索引的使用后,在應用的還要經常對分區進行維護和治理。日常維護和治理的內容包括:增加一個分區,合并一個分區及刪除分區等等。下面以范圍分區為例說明增加、合并、刪除分區的一般操作: 1.4.1. 增加一個分區: 以下為引用的內容: SQL> alter table dinya_test 2 add partition part_04 values less than(to_date(’2012-01-01’,’yyyy-mm-dd’)) tablespace dinya_spa ce03; Table altered. SQL>增加一個分區的時候,增加的分區的條件必須大于現有分區的最大值,否則系統將提示ORA-14074 partition bound must collate higher than that of the last partition 錯誤。 1.4.2. 合并一個分區: 以下為引用的內容: SQL> alter table dinya_test merge partitions part_01,part_02 into partition part_02; Table altered. SQL>在本例中將原有的表的part_01分區和part_02分區進行了合并,合并后的分區為part_02,假如在合并的時候把合并后的分區定為part_01的時候,系統將提示ORA-14275 cannot reuse lower-bound partition as resulting partition 錯誤。 1.4.3. 刪除分區: 以下為引用的內容: SQL> alter table dinya_test drop partition part_01; Table altered. SQL>刪除分區表的一個分區后,查詢該表的數據時顯示,該分區中的數據已全部丟失,所以執行刪除分區動作時要慎重,確保先備份數據后再執行,或將分區合并。 1.5. 總結: 需要說明的是,本文在舉例說名分區表事務操作的時候,都指定了分區,因為指定了分區,系統在執行的時候則只操作該分區的記錄,提高了數據處理的速度。不要指定分區直接操作數據也是可以的。在分區表上建索引及多索引的使用和非分區表一樣。此外,因為在維護分區的時候可能對分區的索引會產生一定的影響,可能需要在維護之后重建索引,相關內容請參考分區表索引部分的文檔
標簽: Oracle 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
视频一区中文字幕精品| 国产精品久久久久久久久久久久久久久 | 樱桃成人精品视频在线播放| 国产精品腿扒开做爽爽爽挤奶网站| 午夜日韩在线| 日韩精品亚洲一区二区三区免费| 精品国产乱码久久久久久樱花| 88xx成人免费观看视频库| 9色精品在线| 国产精品毛片aⅴ一区二区三区| 国产一区二区精品福利地址| 欧美日韩国产精品一区二区亚洲| 日韩av一二三| 色婷婷精品视频| 日韩av电影一区| 日韩欧美一区二区三区免费观看| 国产亚洲一区二区三区啪| 欧美二三四区| 91欧美日韩在线| 久久婷婷一区| 久久国产麻豆精品| 国产日韩在线观看视频| 国产一区二区三区亚洲综合| 久久要要av| 色综合视频一区二区三区日韩| 日韩精选在线| 精品国产午夜肉伦伦影院| 99精品小视频| 一区二区三区四区日韩| 国产精品欧美日韩一区| 国产粉嫩在线观看| 亚洲深夜av| 国产欧美日韩在线观看视频| 天堂а√在线最新版中文在线| 99国产精品久久久久久久成人热| 亚洲精品亚洲人成在线观看| 国内一区二区三区| 影院欧美亚洲| 国产乱人伦精品一区| 国产一区二区三区四区大秀| 1000部精品久久久久久久久| 日本一区中文字幕| 在线手机中文字幕| 美女日韩在线中文字幕| 国产精品夜夜夜| 久久九九国产| 国产亚洲欧美日韩精品一区二区三区| 日韩伦理在线一区| 亚洲18在线| 国产欧洲在线| 少妇高潮一区二区三区99| 成人综合一区| 一区二区国产精品| 在线人成日本视频| 亚洲欧美在线综合| 成人在线超碰| 亚洲久草在线| 国产成人久久| 亚洲欧洲美洲国产香蕉| 日韩国产一区| 国产乱人伦精品一区| 激情国产在线| 日韩免费精品| 久久精品系列| 只有精品亚洲| 欧美gv在线| 国产欧美一区二区三区精品观看| 色88888久久久久久影院| 日韩精品一区二区三区中文字幕| 国产精品99久久精品| 性色av一区二区怡红| 国产91在线播放精品| 日韩高清不卡一区| 狠狠爱成人网| 日韩欧美网址| 麻豆精品在线视频| 一区二区国产在线| 国产一区二区三区自拍| 精品午夜视频| 日韩va欧美va亚洲va久久| 日韩午夜av| av资源中文在线| 国产精品视频一区二区三区 | 国产粉嫩在线观看| 日本va欧美va精品| 亚洲在线一区| 色老板在线视频一区二区| 麻豆精品国产91久久久久久| 少妇高潮一区二区三区99| 亚洲视频www| 欧美搞黄网站| 最近高清中文在线字幕在线观看1| 日韩高清国产一区在线| 美女尤物久久精品| 成人av二区| 私拍精品福利视频在线一区| 国产高清精品二区| 无码日韩精品一区二区免费| 中文国产一区| 伊人久久大香线蕉av超碰演员| 久久久精品网| 国产高清不卡| 麻豆国产精品一区二区三区| 911亚洲精品| 日本视频中文字幕一区二区三区| 久热精品在线| 9色精品在线| 国产精品日韩久久久| 午夜国产欧美理论在线播放| 日韩av一级| 亚洲www啪成人一区二区| 亚洲+小说+欧美+激情+另类| 欧美视频久久| 久久久免费人体| 亚洲欧美日韩精品一区二区| 欧美日韩水蜜桃| 成人羞羞在线观看网站| 免费一二一二在线视频| 亚洲不卡系列| 激情五月色综合国产精品| 亚洲a一区二区三区| 91精品一区二区三区综合| av一区在线| 久久精品成人| 亚洲美洲欧洲综合国产一区| 国产毛片一区| 午夜性色一区二区三区免费视频| 欧美亚洲在线日韩| 婷婷综合网站| 蜜桃视频在线观看一区二区| 免费观看日韩电影| 深夜福利一区| 国产精品久久久久久模特| 国产精品久久久久久久久久齐齐 | 一区二区三区四区在线看| 99久久精品国产亚洲精品| 欧洲在线一区| 伊人久久大香线蕉av不卡| 日韩一区二区久久| 午夜视频一区二区在线观看| 国产精品白浆| 婷婷激情一区| 午夜国产欧美理论在线播放| 伊人久久一区| 三级久久三级久久久| 国产一区二区三区国产精品| 精品视频国产| 国产视频一区欧美| 国产精品草草| 99视频+国产日韩欧美| 国产日本精品| 成人日韩精品| 亚洲精品亚洲人成在线观看| 国产成人精品一区二区三区免费| 欧美日韩视频| 免费一级欧美片在线观看网站| 91综合网人人| 亚洲国产不卡| 青草国产精品| a天堂资源在线| 亚洲免费影视| 国产欧美日韩一区二区三区四区 | 在线天堂中文资源最新版| 免费国产自久久久久三四区久久| 久久成人国产| 国产精品一页| 91看片一区| 婷婷五月色综合香五月| 国产一区二区三区四区大秀| 国产韩日影视精品| 欧美片网站免费| 日韩久久一区二区三区| 中文字幕av一区二区三区四区| 国产精品一国产精品k频道56| 桃色av一区二区| 日韩区一区二| 私拍精品福利视频在线一区| 日本欧美一区| 久久久久免费av| 国产日韩欧美| 91九色精品| 国产精品嫩模av在线| 欧美亚洲国产精品久久| 久久国产精品色av免费看| 激情综合自拍| 日本少妇一区二区| 蜜桃成人av| 国产精品白丝一区二区三区| 99re国产精品| 国产精品99一区二区三区| 男女男精品网站| 国产黄大片在线观看| 日本v片在线高清不卡在线观看| 日韩在线观看不卡| 国产伦精品一区二区三区在线播放| 久久久精品日韩| 国产精久久一区二区| 蜜桃av一区| 日韩在线不卡| 国产精品国码视频|