Oracle10g分區常用的是:range(范圍分區)、list(列表分區)、hash(哈希分區)、range-hash(范圍—哈希分區)、range-list(列表—復合分區)。
Range分區:Range分區是應用范圍比較廣的表分區方式,它是以列的值的范圍來做為分區的劃分條件,將記錄存放到列值所在的range分區中。
如按照時間劃分,2010年1月的數據放到a分區,2月的數據放到b分區,在創建的時候,需要指定基于的列,以及分區的范圍值。
在按時間分區時,如果某些記錄暫無法預測范圍,可以創建maxvalue分區,所有不在指定范圍內的記錄都會被存儲到maxvalue所在分區中。如:
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分區:
對于那些無法有效劃分范圍的表,可以使用hash分區,這樣對于提高性能還是會有一定的幫助。hash分區會將表中的數據平均分配到你指定的幾個分區中,列所在分區是依據分區列的hash值自動分配,因此你并不能控制也不知道哪條記錄會被放到哪個分區中,hash分區也可以支持多個依賴列。如:
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);
在這里,我們指定了每個分區的表空間。
List分區:
List分區也需要指定列的值,其分區值必須明確指定,該分區列只能有一個,不能像range或者hash分區那樣同時指定多個列做為分區依賴列,但它的單個分區對應值可以是多個。
在分區時必須確定分區列可能存在的值,一旦插入的列值不在分區范圍內,則插入/更新就會失敗,因此通常建議使用list分區時,要創建一個default分區存儲那些不在指定范圍內的記錄,類似range分區中的maxvalue分區。
在根據某字段,如城市代碼分區時,可以指定default,把非分區規則的數據,全部放到這個default分區。如:
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))
組合分區:
如果某表按照某列分區之后,仍然較大,或者是一些其它的需求,還可以通過分區內再建子分區的方式將分區再分區,即組合分區的方式。
組合分區呢在10g中有兩種:range-hash,range-list。注意順序,根分區只能是range分區,子分區可以是hash分區或list分區。
如:
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))tablespacets4partitionby 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分區常用的是:range、list、hash、key
RANGE分區(portioning):根據列值所屬的范圍區間,將元組分配到各個分區。
? LIST分區:類似于按RANGE分區,區別在于LIST分區是基于列值匹配一個離散值集合中的某個值來進行選擇。
? HASH分區:根據用戶定義的函數的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包含MySQL 中有效的、產生非負整數值的任何表達式。
? KEY分區:類似于按HASH分區,區別在于KEY分區只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數。
以上所述是小編給大家介紹的Oracle10個分區和Mysql分區區別詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
新聞熱點
疑難解答