国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle9i中分區partition的使用

2024-08-29 13:38:35
字體:
來源:轉載
供稿:網友

  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算法中最重要的是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的New Feature,分特!
  
  上面列出了Oracle9i中使用分區的四種方法,其中的例子很簡單,真正工作中具體使用那種分區方法要參考你的具體需求。
  
  注:例子中使用的e1,e2,e3,e4等是分區名稱,emp1,emp2,emp3,emp4等是表空間名稱。
  
  Any Questions, Email to : henrywen@21cn.com

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 株洲市| 宁化县| 班玛县| 治多县| 南澳县| 萨迦县| 天峨县| 高淳县| 龙里县| 盐城市| 广宁县| 汉寿县| 临泽县| 定西市| 方正县| 岑巩县| 苍山县| 抚松县| 和田市| 揭西县| 土默特左旗| 交城县| 通渭县| 天台县| 雅江县| 龙山县| 福清市| 高淳县| 庐江县| 汕尾市| 璧山县| 承德市| 龙泉市| 陵川县| 邢台县| 张家界市| 庆元县| 怀仁县| 玉环县| 贞丰县| 逊克县|