Oracle10g分區(qū)常用的是:range(范圍分區(qū))、list(列表分區(qū))、hash(哈希分區(qū))、range-hash(范圍—哈希分區(qū))、range-list(列表—復合分區(qū))。
Range分區(qū):Range分區(qū)是應用范圍比較廣的表分區(qū)方式,它是以列的值的范圍來做為分區(qū)的劃分條件,將記錄存放到列值所在的range分區(qū)中。
如按照時間劃分,2010年1月的數據放到a分區(qū),2月的數據放到b分區(qū),在創(chuàng)建的時候,需要指定基于的列,以及分區(qū)的范圍值。
在按時間分區(qū)時,如果某些記錄暫無法預測范圍,可以創(chuàng)建maxvalue分區(qū),所有不在指定范圍內的記錄都會被存儲到maxvalue所在分區(qū)中。如:
createtable pdba (id number, time date) partition by range (time) ( partitionp1 values less than (to_date('2010-10-1', 'yyyy-mm-dd')), partitionp2 values less than (to_date('2010-11-1', 'yyyy-mm-dd')), partitionp3 values less than (to_date('2010-12-1', 'yyyy-mm-dd')), partitionp4 values less than (maxvalue) )
Hash分區(qū):
對于那些無法有效劃分范圍的表,可以使用hash分區(qū),這樣對于提高性能還是會有一定的幫助。hash分區(qū)會將表中的數據平均分配到你指定的幾個分區(qū)中,列所在分區(qū)是依據分區(qū)列的hash值自動分配,因此你并不能控制也不知道哪條記錄會被放到哪個分區(qū)中,hash分區(qū)也可以支持多個依賴列。如:
createtable test ( transaction_idnumber primary key, item_idnumber(8) not null ) partitionby hash(transaction_id) ( partitionpart_01 tablespace tablespace01, partitionpart_02 tablespace tablespace02, partitionpart_03 tablespace tablespace03 );
在這里,我們指定了每個分區(qū)的表空間。
List分區(qū):
List分區(qū)也需要指定列的值,其分區(qū)值必須明確指定,該分區(qū)列只能有一個,不能像range或者hash分區(qū)那樣同時指定多個列做為分區(qū)依賴列,但它的單個分區(qū)對應值可以是多個。
在分區(qū)時必須確定分區(qū)列可能存在的值,一旦插入的列值不在分區(qū)范圍內,則插入/更新就會失敗,因此通常建議使用list分區(qū)時,要創(chuàng)建一個default分區(qū)存儲那些不在指定范圍內的記錄,類似range分區(qū)中的maxvalue分區(qū)。
在根據某字段,如城市代碼分區(qū)時,可以指定default,把非分區(qū)規(guī)則的數據,全部放到這個default分區(qū)。如:
createtable custaddr ( idvarchar2(15 byte) not null, areacodevarchar2(4 byte) ) partitionby list (areacode) (partition t_list025 values ('025'), partitiont_list372 values ('372') , partitiont_list510 values ('510'), partitionp_other values (default) )
組合分區(qū):
如果某表按照某列分區(qū)之后,仍然較大,或者是一些其它的需求,還可以通過分區(qū)內再建子分區(qū)的方式將分區(qū)再分區(qū),即組合分區(qū)的方式。
組合分區(qū)呢在10g中有兩種:range-hash,range-list。注意順序,根分區(qū)只能是range分區(qū),子分區(qū)可以是hash分區(qū)或list分區(qū)。
如:
createtable test ( transaction_idnumber primary key, transaction_datedate ) partitionby range(transaction_date) subpartition by hash(transaction_id) subpartitions3 store in (tablespace01,tablespace02,tablespace03) ( partitionpart_01 values less than(to_date('2009-01-01','yyyy-mm-dd')), partitionpart_02 values less than(to_date('2010-01-01','yyyy-mm-dd')), partitionpart_03 values less than(maxvalue) ); createtable emp_sub_template (deptno number, empname varchar(32), grade number) partitionby range(deptno) subpartition by hash(empname) subpartitiontemplate (subpartitiona tablespace ts1, subpartitionb tablespace ts2, subpartitionc tablespace ts3, subpartitiond tablespace ts4 ) (partitionp1 values less than (1000), partitionp2 values less than (2000), partitionp3 values less than (maxvalue) ); createtable quarterly_regional_sales (deptnonumber, item_no varchar2(20), txn_datedate, txn_amount number, state varchar2(2)) tablespacets4 partitionby range (txn_date) subpartitionby list (state) (partitionq1_1999 values less than (to_date('1-apr-1999','dd-mon-yyyy')) (subpartitionq1_1999_northwest values ('or', 'wa'), subpartitionq1_1999_southwest values ('az', 'ut', 'nm'), subpartitionq1_1999_northeast values ('ny', 'vm', 'nj'), subpartitionq1_1999_southeast values ('fl', 'ga'), subpartitionq1_1999_northcentral values ('sd', 'wi'), subpartitionq1_1999_southcentral values ('ok', 'tx') ), partitionq2_1999 values less than ( to_date('1-jul-1999','dd-mon-yyyy')) (subpartitionq2_1999_northwest values ('or', 'wa'), subpartitionq2_1999_southwest values ('az', 'ut', 'nm'), subpartitionq2_1999_northeast values ('ny', 'vm', 'nj'), subpartitionq2_1999_southeast values ('fl', 'ga'), subpartitionq2_1999_northcentral values ('sd', 'wi'), subpartitionq2_1999_southcentral values ('ok', 'tx') ), partitionq3_1999 values less than (to_date('1-oct-1999','dd-mon-yyyy')) (subpartitionq3_1999_northwest values ('or', 'wa'), subpartitionq3_1999_southwest values ('az', 'ut', 'nm'), subpartitionq3_1999_northeast values ('ny', 'vm', 'nj'), subpartitionq3_1999_southeast values ('fl', 'ga'), subpartitionq3_1999_northcentral values ('sd', 'wi'), subpartitionq3_1999_southcentral values ('ok', 'tx') ), partitionq4_1999 values less than ( to_date('1-jan-2000','dd-mon-yyyy')) (subpartitionq4_1999_northwest values ('or', 'wa'), subpartitionq4_1999_southwest values ('az', 'ut', 'nm'), subpartitionq4_1999_northeast values ('ny', 'vm', 'nj'), subpartitionq4_1999_southeast values ('fl', 'ga'), subpartitionq4_1999_northcentral values ('sd', 'wi'), subpartitionq4_1999_southcentral values ('ok', 'tx') ) );
MySQL分區(qū)常用的是:range、list、hash、key
RANGE分區(qū)(portioning):根據列值所屬的范圍區(qū)間,將元組分配到各個分區(qū)。
LIST分區(qū):類似于按RANGE分區(qū),區(qū)別在于LIST分區(qū)是基于列值匹配一個離散值集合中的某個值來進行選擇。
HASH分區(qū):根據用戶定義的函數的返回值來進行選擇的分區(qū),該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包含MySQL 中有效的、產生非負整數值的任何表達式。
KEY分區(qū):類似于按HASH分區(qū),區(qū)別在于KEY分區(qū)只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數。
以上所述是小編給大家介紹的Oracle10個分區(qū)和Mysql分區(qū)區(qū)別詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
標簽:中衛(wèi) 定西 浙江 南寧 上海 張家界 鄂州 阿里
巨人網絡通訊聲明:本文標題《Oracle10個分區(qū)和Mysql分區(qū)區(qū)別詳解》,本文關鍵詞 Oracle10,個,分區(qū),和,Mysql,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。