Oracle9i中分割槽Partition的使用簡介

tolywang發表於2007-05-10
Oracle9i透過引入列表分割槽(List Partition),使得當前共有4種分割槽資料的方法,具體列出如下:

第一種 範圍分割槽

1 對錶進行單列的範圍分割槽:

這使最為常用也是最簡單的方法,具體例子如下:

  create table emp 
  (empno number(4), 
  ename varchar2(30), 
  sal number) 
  partition by range(empno) 
  (partition e1 values less than (1000) tablespace emp1, 
  partition e2 values less than (2000) tablespace emp2, 
  partition e3 values less than (maxvalue) tablespace emp3); 
  
  insert into emp values (100,'Tom',1000); 
  insert into emp values (500,'Peter',2000); 
  insert into emp values (1000,'Scott',3000); 
  insert into emp values (1999,'Bill',4000); 
  insert into emp values (5000,'Gates',6000); 
  commit;
  

從emp表中選擇全部的紀錄如下:

  SQL> select * from emp; 
  
  EMPNO ENAME SAL 
  ---------- ------------------------------ ---------- 
  100 Tom 1000 
  500 Peter 2000 
  1000 Scott 3000 
  1999 Bill 4000 
  5000 Gates 6000
  

還可以按照分割槽進行選擇:

  SQL> select * from emp partition (e1); 
  EMPNO ENAME SAL 
  ---------- ------------------------------ ---------- 
  100 Tom 1000 
  500 Peter 2000 
  
  SQL> select * from emp partition (e2) 
  EMPNO ENAME SAL 
  ---------- ------------------------------ ---------- 
  1000 Scott 3000 
  1999 Bill 4000 
  
  SQL> select * from emp partition (e3) 
  EMPNO ENAME SAL 
  ---------- ------------------------------ ---------- 
  5000 Gates 6000
  

使用了分割槽,還可以單獨針對指定的分割槽進行truncate操作:

  alter table emp truncate partition e2;
  

2 對錶進行多列的範圍分割槽:

多列的範圍分割槽主要是基於表中多個列的值的範圍對資料進行分割槽,例如:

  drop table emp; 
  create table emp 
  (empno number(4), 
  ename varchar2(30), 
  sal number, 
  day integer not null, 
  month integer not null) 
  partition by range(month,day) 
  (partition e1 values less than (5,1) tablespace emp1, 
  partition e2 values less than (10,2) tablespace emp2, 
  partition e3 values less than (maxvalue,maxvalue) tablespace emp3); 
  
  SQL> insert into emp values (100,'Tom',1000,10,6); 
  SQL> insert into emp values (200,'Peter',2000,3,1); 
  SQL> insert into emp values (300,'Jane',3000,23,11);

 

第二種 Hash分割槽:

hash分割槽最主要的機制是根據hash演算法來計算具體某條紀錄應該插入到哪個分割槽中,hash演算法中最重要的是hash函式,Oracle中如果你要使用hash分割槽,只需指定分割槽的數量即可。建議分割槽的數量採用2的n次方,這樣可以使得各個分割槽間資料分佈更加均勻。

具體例子如下:

  drop table emp; 
  create table emp ( 
  empno number(4), 
  ename varchar2(30), 
  sal number) 
  partition by hash (empno) 
  partitions 8 
  store in (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);

  

怎麼樣?很方便吧!

第三種 複合分割槽:

這是一種將前兩種分割槽綜合在一起使用的方法,例如:

  drop table emp; 
  create table emp ( 
  empno number(4), 
  ename varchar2(30), 
  hiredate date) 
  partition by range (hiredate) 
  subpartition by hash (empno) 
  subpartitions 2 
  (partition e1 values less than (to_date('20020501','YYYYMMDD')), 
  partition e2 values less than (to_date('20021001','YYYYMMDD')), 
  partition e3 values less than (maxvalue));

上面的例子中將僱員表先按照僱傭時間hiredate進行了範圍分割槽,然後再把每個分割槽分為兩個子hash分割槽。例子中一共將產生6個分割槽。

第四種 列表分割槽:

這是Oracle 9i的新特性,有了這種分割槽使得我們可以方便的按照值來將資料分為更小的片斷。

例如:

  drop table emp; 
  create table emp ( 
  empno number(4), 
  ename varchar2(30), 
  location varchar2(30)) 
  partition by list (location) 
  (partition e1 values ('北京'), 
  partition e2 values ('上海','天津','重慶'), 
  partition e3 values ('廣東','福建'));

  

這裡說明一下,列表分割槽不能有maxvalue,當你試圖insert列表中不存在的值的時候,Oracle會拒絕這條紀錄(ORA-14400)。

怎麼樣?看出列表分割槽很有用了吧?上面列出了Oracle9i中使用分割槽的四種方法,其中的例子很簡單,真正工作中具體使用那種分割槽方法要參考你的具體需求。

注:例子中使用的e1,e2,e3,e4等是分割槽名稱,emp1,emp2,emp3,emp4等是表空間名稱

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84614/,如需轉載,請註明出處,否則將追究法律責任。

相關文章