废话少说,直接讲分区语法。
Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区。
一:范围分区
就是根据数据库表中某一字段的值的范围来划分分区,例如:
Sql****代码[[图片上传失败...(image-51275c-1515138077228)]](javascript:void() ""收藏这段代码" ")
create table graderecord
(
sno varchar2(10),
sname varchar2(20),
dormitory varchar2(3),
grade int
)
partition by range(grade)
(
partition bujige values less than(60), --不及格
partition jige values less than(85), --及格
partition youxiu values less than(maxvalue) --优秀
)
插入实验数据:
Sql****代码[[图片上传失败...(image-a3e621-1515138077228)]](javascript:void() ""收藏这段代码" ")
insert into graderecord values('511601','魁','229',92);
insert into graderecord values('511602','凯','229',62);
insert into graderecord values('511603','东','229',26);
insert into graderecord values('511604','亮','228',77);
insert into graderecord values('511605','敬','228',47);
insert into graderecord(sno,sname,dormitory) values('511606','峰','228');
insert into graderecord values('511607','明','240',90);
insert into graderecord values('511608','楠','240',100);
insert into graderecord values('511609','涛','240',67);
insert into graderecord values('511610','博','240',75);
insert into graderecord values('511611','铮','240',60);
下面查询一下全部数据,然后查询各个分区数据,代码一起写:
Java****代码[[图片上传失败...(image-6ef77d-1515138077228)]](javascript:void() ""收藏这段代码" ")
select * from graderecord;
select * from graderecord partition(bujige);
select * from graderecord partition(jige);
select * from graderecord partition(youxiu);
全部数据如下:
[图片上传失败...(image-ca8a8a-1515138077250)]
不及格数据如下:
[图片上传失败...(image-6c4788-1515138077250)]
及格数据如下:
[图片上传失败...(image-77258f-1515138077250)]
优秀数据如下:
[图片上传失败...(image-fa342a-1515138077249)]
说明:数据中有空值,****Oracle****机制会自动将其规划到****maxvalue****的分区中。
二:散列分区
散列分区是根据字段的hash值进行均匀分布,尽可能的实现各分区所散列的数据相等。
还是刚才那个表,只不过把范围分区改换为散列分区,语法如下(删除表之后重建):
Sql****代码[[图片上传失败...(image-9f1fbd-1515138077228)]](javascript:void() ""收藏这段代码" ")
create table graderecord
(
sno varchar2(10),
sname varchar2(20),
dormitory varchar2(3),
grade int
)
partition by hash(sno)
(
partition p1,
partition p2,
partition p3
);
插入实验数据,与范围分区实验插入的数据相同。
然后查询分区数据:
Sql****代码[[图片上传失败...(image-de2ed9-1515138077228)]](javascript:void() ""收藏这段代码" ")
select * from graderecord partition(p1);
select * from graderecord partition(p2);
select * from graderecord partition(p3);
p1分区的数据:
[图片上传失败...(image-769f89-1515138077249)]
p2分区的数据:
[图片上传失败...(image-2e99dc-1515138077249)]
p3分区的数据:
[图片上传失败...(image-7551e0-1515138077249)]
说明:散列分区即为哈希分区,****Oracle****采用哈希码技术分区,具体分区如何由****Oracle****说的算,也可能我下一次搜索就不是这个数据了。
三:列表分区
列表分区明确指定了根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分的。
Sql****代码[[图片上传失败...(image-3cf79a-1515138077228)]](javascript:void() ""收藏这段代码" ")
create table graderecord
(
sno varchar2(10),
sname varchar2(20),
dormitory varchar2(3),
grade int
)
partition by list(dormitory)
(
partition d229 values('229'),
partition d228 values('228'),
partition d240 values('240')
)
以上根据宿舍来进行列表分区,插入与范围分区实验相同的数据,做查询如下:
Sql****代码[[图片上传失败...(image-b3b475-1515138077228)]](javascript:void() ""收藏这段代码" ")
select * from graderecord partition(d229);
select * from graderecord partition(d228);
select * from graderecord partition(d240);
d229分区所得数据如下:
[图片上传失败...(image-497d44-1515138077249)]
d228分区所得数据如下:
[图片上传失败...(image-a49ba4-1515138077249)]
d240分区所得数据如下:
[图片上传失败...(image-aea166-1515138077249)]
四:复合分区(范围-散列分区,范围-列表分区)
首先讲范围-散列分区。先声明一下:列表分区不支持多列,但是范围分区和