Oracle表分區分為四種:範圍分區,散列分區,列表分區和複合分區(轉載)

来源:https://www.cnblogs.com/wingler/archive/2018/04/27/8963197.html
-Advertisement-
Play Games

一:範圍分區 就是根據資料庫表中某一欄位的值的範圍來劃分分區,例如: 插入實驗數據: 下麵查詢一下全部數據,然後查詢各個分區數據,代碼一起寫: 全部數據如下: 不及格數據如下: 及格數據如下: 優秀數據如下: 說明:數據中有空值,Oracle機制會自動將其規划到maxvalue的分區中。 二:散列分 ...


一:範圍分區

就是根據資料庫表中某一欄位的值的範圍來劃分分區,例如:

複製代碼
 1 create table graderecord  
 2   (  
 3   sno varchar2(10),  
 4   sname varchar2(20),  
 5   dormitory varchar2(3),  
 6   grade int  
 7 )  
 8 partition by range(grade)  
 9 (  
10   partition bujige values less than(60), --不及格  
11   partition jige values less than(85), --及格  
12   partition youxiu values less than(maxvalue) --優秀  
13 )  
複製代碼

 插入實驗數據:

複製代碼
 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);  
複製代碼

 下麵查詢一下全部數據,然後查詢各個分區數據,代碼一起寫:

1 select * from graderecord;  
2 select * from graderecord partition(bujige);  
3 select * from graderecord partition(jige);  
4 select * from graderecord partition(youxiu);

 

全部數據如下:

 

不及格數據如下:      及格數據如下:      優秀數據如下:  

說明:數據中有空值,Oracle機制會自動將其規划到maxvalue的分區中。

 

二:散列分區

散列分區是根據欄位的hash值進行均勻分佈,儘可能的實現各分區所散列的數據相等。

還是剛纔那個表,只不過把範圍分區改換為散列分區,語法如下(刪除表之後重建):

複製代碼
 1 create table graderecord  
 2 (  
 3   sno varchar2(10),  
 4   sname varchar2(20),  
 5   dormitory varchar2(3),  
 6   grade int  
 7 )  
 8 partition by hash(sno)  
 9 (  
10   partition p1,  
11   partition p2,  
12   partition p3  
13 );  
複製代碼

插入實驗數據,與範圍分區實驗插入的數據相同。

然後查詢分區數據:

1 select * from graderecord partition(p1);  
2 select * from graderecord partition(p2);  
3 select * from graderecord partition(p3);  

 p1分區的數據:

p2分區的數據:

p3分區的數據:

說明:散列分區即為哈希分區,Oracle採用哈希碼技術分區,具體分區如何由Oracle說的算,也可能我下一次搜索就不是這個數據了。

 

三:列表分區

列表分區明確指定了根據某欄位的某個具體值進行分區,而不是像範圍分區那樣根據欄位的值範圍來劃分的。

複製代碼
 1 create table graderecord  
 2 (  
 3   sno varchar2(10),  
 4   sname varchar2(20),  
 5   dormitory varchar2(3),  
 6   grade int  
 7 )  
 8 partition by list(dormitory)  
 9 (  
10   partition d229 values('229'),  
11   partition d228 values('228'),  
12   partition d240 values('240')  
13 )  
複製代碼

以上根據宿舍來進行列表分區,插入與範圍分區實驗相同的數據,做查詢如下:

1 select * from graderecord partition(d229);  
2 select * from graderecord partition(d228);  
3 select * from graderecord partition(d240);

 d229分區所得數據如下:

d228分區所得數據如下:

d240分區所得數據如下:

四:複合分區 (範圍-散列分區,範圍-列表分區)

首先講範圍-散列分區。先聲明一下:列表分區不支持多列,但是範圍分區和哈希分區支持多列。

代碼如下:

複製代碼
 1 create table graderecord  
 2 (  
 3   sno varchar2(10),  
 4   sname varchar2(20),  
 5   dormitory varchar2(3),  
 6   grade int  
 7 )  
 8 partition by range(grade)  
 9 subpartition by hash(sno,sname)  
10 (  
11   partition p1 values less than(75)  
12             (  
13                subpartition sp1,subpartition sp2  
14             ),  
15   partition p2 values less than(maxvalue)  
16             (  
17                subpartition sp3,subpartition sp4  
18             )  
19 );  
複製代碼

 

以grade劃分範圍,然後以sno和sname劃分散列分區,當數據量大的時候散列分區則趨於“平均”。

插入數據:

 

複製代碼
 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);  
複製代碼

 查詢如下:

複製代碼
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:

 

 

說明:當數據量越來越大時,哈希分區的分區表中數據越來越趨於平衡。

 

下麵講範圍-列表分區

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

 

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

 插入實驗數據:

 

複製代碼
 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 values('200704','010','04','ghk001','13800000000');  
 5 insert into MobileMessage values('200705','010','04','ghk001','13800000000');  
 6 insert into MobileMessage values('200705','011','18','sxl001','13222000000');  
 7 insert into MobileMessage values('200706','011','21','sxl001','13222000000');  
 8 insert into MobileMessage values('200706','012','11','tgg001','13800044400');  
 9 insert into MobileMessage values('200707','010','04','ghk001','13800000000');  
10 insert into MobileMessage values('200708','012','24','tgg001','13800044400');  
11 insert into MobileMessage values('200709','014','29','zjj001','13100000000');  
12 insert into MobileMessage values('200710','014','29','zjj001','13100000000');  
13 insert into MobileMessage values('200711','014','29','zjj001','13100000000');  
14 insert into MobileMessage values('200711','013','30','wgc001','13444000000');  
15 insert into MobileMessage values('200712','013','30','wgc001','13444000000');  
16 insert into MobileMessage values('200712','010','30','ghk001','13800000000');  
17 insert into MobileMessage values('200801','015','22','myx001','13633330000');  
複製代碼

查詢結果如下:

1 select * from MobileMessage; 

 

分區p1查詢結果如下:

分區p2查詢結果如下:

子分區xiaxun2查詢結果如下:

說明:範圍分區 range(A,B)的分區法則,範圍分區都是 values less than(A,B)的,通常情況下以A為準,如果小於A的不用考慮B,直接插進去,如果等於A那麼考慮B,要是滿足B的話也插進去。

另一種範圍-列表分區,包含模板的(比較繁瑣,但是更加精確,處理海量存儲數據十分必要):

複製代碼
  1 create table MobileMessage  
  2 (  
  3  ACCT_MONTH VARCHAR2(6), -- 帳期 格式:年月 YYYYMM  
  4  AREA_NO VARCHAR2(10), -- 地域號碼  
  5  DAY_ID VARCHAR2(2), -- 本月中的第幾天 格式 DD  
  6  SUBSCRBID VARCHAR2(20), -- 用戶標識   
  7  SVCNUM VARCHAR2(30) -- 手機號碼  
  8 )  
  9 partition by range(ACCT_MONTH,AREA_NO) subpartition by list(DAY_ID)  
 10 subpartition template  
 11 (  
 12  subpartition sub1 values('01'),subpartition sub2 values('02'),  
 13  subpartition sub3 values('03'),subpartition sub4 values('04'),  
 14  subpartition sub5 values('05'),subpartition sub6 values('06'),  
 15  subpartition sub7 values('07'),subpartition sub8 values('08'),  
 16  subpartition sub9 values('09'),subpartition sub10 values('10'),  
 17  subpartition sub11 values('11'),subpartition sub12 values('12'),  
 18  subpartition sub13 values('13'),subpartition sub14 values('14'),  
 19  subpartition sub15 values('15'),subpartition sub16 values('16'),  
 20  subpartition sub17 values('17'),subpartition sub18 values('18'),  
 21  subpartition sub19 values('19'),subpartition sub20 values('20'),  
 22  subpartition sub21 values('21'),subpartition sub22 values('22'),  
 23  subpartition sub23 values('23'),subpartition sub24 values('24'),  
 24  subpartition sub25 values('25'),subpartition sub26 values('26'),  
 25  subpartition sub27 values('27'),subpartition sub28 values('28'),  
 26  subpartition sub29 values('29'),subpartition sub30 values('30'),  
 27  subpartition sub31 values('31')  
 28 )  
 29 (  
 30   partition p_0701_010 values less than('200701','011'),  
 31   partition p_0701_011 values less than('200701','012'),  
 32   partition p_0701_012 values less than('200701','013'),  
 33   partition p_0701_013 values less than('200701','014'),  
 34   partition p_0701_014 values less than('200701','015'),  
 35   partition p_0701_015 values less than('200701','016'),  
 36   partition p_0702_010 values less than('200702','011'),  
 37   partition p_0702_011 values less than('200702','012'),  
 38   partition p_0702_012 values less than('200702','013'),  
 39   partition p_0702_013 values less than('200702','014'),  
 40   partition p_0702_014 values less than('200702','015'),  
 41   partition p_0702_015 values less than('200702','016'),  
 42   partition p_0703_010 values less than('200703','011'),  
 43   partition p_0703_011 values less than('200703','012'),  
 44   partition p_0703_012 values less than('200703','013'),  
 45   partition p_0703_013 values less than('200703','014'),  
 46   partition p_0703_014 values less than('200703','015'),  
 47   partition p_0703_015 values less than('200703','016'),    
 48   partition p_0704_010 values less than('200704','011'),  
 49   partition p_0704_011 values less than('200704','012'),  
 50   partition p_0704_012 values less than('200704','013'),  
 51   partition p_0704_013 values less than('200704','014'),  
 52   partition p_0704_014 values less than('200704','015'),  
 53   partition p_0704_015 values less than('200704','016'),    
 54   partition p_0705_010 values less than('200705','011'),  
 55   partition p_0705_011 values less than('200705','012'),  
 56   partition p_0705_012 values less than('200705','013'),  
 57   partition p_0705_013 values less than('200705','014'),  
 58   partition p_0705_014 values less than('200705','015'),  
 59   partition p_0705_015 values less than('200705','016'),    
 60   partition p_0706_010 values less than('200706','011'),  
 61   partition p_0706_011 values less than('200706','012'),  
 62   partition p_0706_012 values less than('200706','013'),  
 63   partition p_0706_013 values less than('200706','014'),  
 64   partition p_0706_014 values less than('200706','015'),  
 65   partition p_0706_015 values less than('200706','016'),    
 66   partition p_0707_010 values less than('200707','011'),  
 67   partition p_0707_011 values less than('200707','012'),  
 68   partition p_0707_012 values less than('200707','013'),  
 69   partition p_0707_013 values less than('200707','014'),  
 70   partition p_0707_014 values less than('200707','015'),  
 71   partition p_0707_015 values less than('200707','016'),    
 72   partition p_0708_010 values less than('200708','011'),  
 73   partition p_0708_011 values less than('200708','012'),  
 74   partition p_0708_012 values less than('200708','013'),  
 75   partition p_0708_013 values less than('200708','014'),  
 76   partition p_0708_014 values less than('200708','015'),  
 77   partition p_0708_015 values less than('200708','016'),    
 78   partition p_0709_010 values less than('200709','011'),  
 79   partition p_0709_011 values less than('200709','012'),  
 80   partition p_0709_012 values less than('200709','013'),  
 81   partition p_0709_013 values less than('200709','014'),  
 82   partition p_0709_014 values less than('200709','015'),  
 83   partition p_0709_015 values less than('200709','016'),    
 84   partition p_0710_010 values less than('200710','011'),  
 85   partition p_0710_011 values less than('200710','012'),  
 86   partition p_0710_012 values less than('200710','013'),  
 87   partition p_0710_013 values less than('200710','014'),  
 88   partition p_0710_014 values less than('200710','015'),  
 89   partition p_0710_015 values less than('200710','016'),    
 90   partition p_0711_010 values less than('200711','011'),  
 91   partition p_0711_011 values less than('200711','012'),  
 92   partition p_0711_012 values less than('200711','013'),  
 93   partition p_0711_013 values less than('200711','014'),  
 94   partition p_0711_014 values less than('200711','015'),  
 95   partition p_0711_015 values less than('200711','016'),    
 96   partition p_0712_010 values less than('200712','011'),  
 97   partition p_0712_011 values less than('200712','012'),  
 98   partition p_0712_012 values less than('200712','013'),  
 99   partition p_0712_013 values less than('200712','014'),  
100   partition p_0712_014 values less than('200712','015'),  
101   partition p_0712_015 values less than('200712','016'),    
102   partition p_0801_010 values less than('200801','011'),  
103   partition p_0801_011 values less than('200801','012'),  
104   partition p_0801_012 values less than('200801','013'),  
105   partition p_0801_013 values less than('200801','014'),  
106   partition p_0801_014 values less than('200801','015'),  
107   partition p_0801_015 values less than('200801','016'),    
108   partition p_other values less than(maxvalue, maxvalue)  
109 );  
複製代碼

這個是帶有模板子分區的,模板子分區詳細到月中的天。這種分區模式只要建立了分區就會自動創建子分區的。

插入上面不帶模板分區實驗相同的數據,隨機查詢分區數據:

 

查詢分區p_0701_010的數據:

 

1 select * from MobileMessage partition(p_0701_010); 

 

查詢結果:

查詢子分區p_0701_010_sub4的數據:

1 select * from MobileMessage subpartition(p_0701_010_sub4);

查詢結果如下:

查詢分區p_0706_011的數據:

1 select * from MobileMessage partition(p_0706_011); 

 

查詢結果如下:

 

查詢子分區p_0706_011_sub21的數據:

1 select * from MobileMessage subpartition(p_0706_011_sub21);

 

查詢結果如下:

 

下麵講講分區的維護操作:

(1)分裂分區,以第一個範圍分區為例:

1 alter table graderecord split partition jige at(75)   
2       into(partition keyi,partition lianghao);

 

把分區及格分裂為兩個分區:可以和良好。

(2)合併分區,以第一個範圍分區為例:

1 alter table graderecord merge partitions keyi,lianghao   
2 into partition jige;  

 

把可以和良好兩個分區合併為及格。

(3)添加分區,由於在範圍分區上添加分區要求添加的分區範圍大於原有分區最大值,但原有分區最大值已經為maxvalue,故本處以第二個散列分區為例:

1 alter table graderecord add partition p4; 

 

 給散列分區例子又增加了一個分區p4 。

(4)刪除分區,語法:

 

1 alter table table_name drop partition partition_name; 

(5)截斷分區,清空分區中的數據

 

1 alter table table_name truncate partition partition_name; 

 

說明:對待分區的操作同樣可以對待子分區,效果一樣。刪除一個分區會同時刪除其下的子分區。合併多個分區也會把他們的子分區自動合併。分裂分區時註意分裂點。

 

另外不帶模板子分區和帶有模板子分區的分區表操作的區別:帶有子分區模板的分區表在添加分區時候自動添加子分區,不帶模板子分區的分區表沒有這個功能;帶有子分區模板的分區表在更改分區時只需更改分區,不帶模板子分區的分區表在更改分區時一定註意連同子分區一起更改。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前提是已經安裝好了zk集群 1.下載 kafka_2.11-1.0.0.tgz 下載網址 http://kafka.apache.org/documentation.html 2.解壓 tar -zxvf kafka_2.11-1.0.0.tgz 3.修改配置文件 進入config目錄修改serve ...
  • 1.進入linux命令行,輸入cd /進入到根目錄,然後再輸入ll,查看列表信息 說明:比如:dr-xr-xr-x. 2 root root 4096 4月 26 12:53 bin,第一個d:表示directory,文件夾,-表示普通的二進位文件,l表示link,表示軟鏈接文件,類似於window ...
  • 一、未安裝GCC 解決方法:執行yum install gcc-c++命令安裝GCC,完成後再次執行make命令 Linux無法連接網路 http://www.cnblogs.com/guoxiangyue/p/8916854.html 二、jemalloc/jemalloc.h 問題 信息顯示出現 ...
  • 1 /* 2 BEZIER.C -- Bezier Splines Demo 3 (c) Charles Petzold, 1998 4 */ 5 6 #include <Windows.h> 7 8 LRESULT CALLBACK WndPorc(HWND, UINT, WPARAM, LPAR ...
  • one shot本身的意思的只有一次的,結合到中斷這個場景,則表示中斷是一次性觸發的,不能嵌套。對於primary handler,當然是不會嵌套,但是對於threaded interrupt handler,我們有兩種選擇,一種是mask該interrupt source,另外一種是unmask該 ...
  • keys * 返回滿足的所有鍵 exists key 是否存在指定的key,存在返回1,不存在返回0 expire key time 設置指定key的過期時間,可以使用ttl key查看剩餘時間 persist key 取消過期時間 select db 選擇資料庫,資料庫為0-15(一共16個資料庫 ...
  • 翻譯:MySQL Error: Too many connections 前言: 本文是對Muhammad Irfan的這篇博客MySQL Error: Too many connections的翻譯,如有翻譯不對或不好的地方,敬請指出,大家一起學習進步。尊重原創和翻譯勞動成果,轉載時請註明出處。謝... ...
  • 轉自:http://www.maomao365.com/?p=5710 摘要:今天接到一個需求,有一張數據表,記錄的是消費明細數據,現在需要做一個累計結餘,記錄每次的數據結餘合計,下文將展示一種sql腳本的編寫方式實驗環境:sqlserver 2008 R2如下例所示: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...