Oracle表分區.

ORACLE數據庫中PARTITION的用法(轉載)

Oracle9i通過引入列表分區(List Partition),使得當前共有4種分區數據的方法,具體列出如下: 
  
  第一種 範圍分區 
  對錶進行單列的範圍分區: 
  這使最爲常用也是最簡單的方法,具體例子如下: 
  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; 
  
  對錶進行多列的範圍分區: 
  多列的範圍分區主要是基於表中多個列的值的範圍對數據進行分區,例如: 
  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算法中最重要的是hash函數,Oracle中如果你要使用hash分區,只需指定分區的數量即可 
  建議分區的數量採用2n次方,這樣可以使得各個分區間數據分佈更加均勻 
  具體例子如下: 
  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)。 
  怎麼樣?看出列表分區很有用了吧?這麼方便的東東居然是Oracle9iNew Feature,分特! 
  
  上面列出了Oracle9i中使用分區的四種方法,其中的例子很簡單,真正工作中具體使用那種分區方法要參考你的具體需求。 
  
  注:例子中使用的e1,e2,e3,e4等是分區名稱,emp1,emp2,emp3,emp4等是表空間名稱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章