1. 程式人生 > >複合分割槽 (範圍-雜湊分割槽,範圍-列表分割槽)

複合分割槽 (範圍-雜湊分割槽,範圍-列表分割槽)

首先講範圍-雜湊分割槽。先宣告一下:列表分割槽不支援多列,但是範圍分割槽和雜湊分割槽支援多列。

程式碼如下:

Sql程式碼  收藏程式碼
  1. create table graderecord 
  2.   sno varchar2(10), 
  3.   sname varchar2(20), 
  4.   dormitory varchar2(3), 
  5.   grade int 
  6. partition by range(grade) 
  7. subpartition by hash(sno,sname) 
  8.   partition p1 values less than(75) 
  9.             
  10.                subpartition sp1,subpartition sp2 
  11.             ), 
  12.   partition p2 values less than(maxvalue) 
  13.             
  14.                subpartition sp3,subpartition sp4 
  15.             
  16. ); 

 以grade劃分範圍,然後以sno和sname劃分雜湊分割槽,當資料量大的時候雜湊分割槽則趨於“平均”。

插入資料:

Sql程式碼  收藏程式碼
  1. insert
     into graderecord values('511601','魁','229',92); 
  2. insert into graderecord values('511602','凱','229',62); 
  3. insert into graderecord values('511603','東','229',26); 
  4. insert into graderecord values('511604','亮','228',77); 
  5. insert into graderecord values('511605','敬','228',47); 
  6. insert into graderecord(sno,sname,dormitory) values
    ('511606','峰','228'); 
  7. insert into graderecord values('511607','明','240',90); 
  8. insert into graderecord values('511608','楠','240',100); 
  9. insert into graderecord values('511609','濤','240',67); 
  10. insert into graderecord values('511610','博','240',75); 
  11. insert into graderecord values('511611','錚','240',60); 
  12. insert into graderecord values('511612','狸','244',72); 
  13. insert into graderecord values('511613','傑','244',88); 
  14. insert into graderecord values('511614','萎','244',19); 
  15. insert into graderecord values('511615','猥','244',65); 
  16. insert into graderecord values('511616','丹','244',59); 
  17. insert into graderecord values('511617','靳','244',95); 

 查詢如下:

Sql程式碼  收藏程式碼
  1. select from graderecord partition(p1); 
  2. select from graderecord partition(p2); 
  3. select from graderecord subpartition(sp1); 
  4. select from graderecord subpartition(sp2); 
  5. select from graderecord subpartition(sp3); 
  6. select from graderecord subpartition(sp4); 

 分割槽p1資料如下,本例中75分以下:

分割槽p2資料如下,本例中75分之上包括75分:

子分割槽sp1:

子分割槽sp2:

子分割槽sp3:

子分割槽sp4:

說明:當資料量越來越大時,雜湊分割槽的分割槽表中資料越來越趨於平衡。

下面講範圍-列表分割槽

範圍-列表分割槽有兩種創立方式,先說說沒有模板的建立方式,這個表我要重建:

Sql程式碼  收藏程式碼
  1. create table MobileMessage 
  2.  ACCT_MONTH VARCHAR2(6), -- 帳期 格式:年月 YYYYMM 
  3.  AREA_NO VARCHAR2(10), -- 地域號碼  
  4.  DAY_ID VARCHAR2(2), -- 本月中的第幾天 格式 DD 
  5.  SUBSCRBID VARCHAR2(20), -- 使用者標識  
  6.  SVCNUM VARCHAR2(30) -- 手機號碼 
  7. partition by range(ACCT_MONTH,AREA_NO) subpartition by list(DAY_ID) 
  8.   partition p1 values less than('200705','012'
  9.   
  10.     subpartition shangxun1 values('01','02','03','04','05','06','07','08','09','10'), 
  11.     subpartition zhongxun1 values('11','12','13','14','15','16','17','18','19','20'), 
  12.     subpartition xiaxun1 values('21','22','23','24','25','26','27','28','29','30','31'
  13.   ), 
  14.   partition p2 values less than('200709','014'
  15.   
  16.     subpartition shangxun2 values('01','02','03','04','05','06','07','08','09','10'), 
  17.     subpartition zhongxun2 values('11','12','13','14','15','16','17','18','19','20'), 
  18.     subpartition xiaxun2 values('21','22','23','24','25','26','27','28','29','30','31'
  19.   ), 
  20.   partition p3 values less than('200801','016'
  21.   
  22.     subpartition shangxun3 values('01','02','03','04','05','06','07','08','09','10'), 
  23.     subpartition zhongxun3 values('11','12','13','14','15','16','17','18','19','20'), 
  24.     subpartition xiaxun3 values('21','22','23','24','25','26','27','28','29','30','31'
  25.   

 插入實驗資料:

Sql程式碼  收藏程式碼
  1. insert into MobileMessage values('200701','010','04','ghk001','13800000000'); 
  2. insert into MobileMessage values('200702','015','12','myx001','13633330000'); 
  3. insert into MobileMessage values('200703','015','24','hjd001','13300000000'); 
  4. insert into MobileMessage