使用Oracle分区表类型
分区表的有用性
我们的oracle表中的数据最终会保存到磁盘文件中。 缺省情况下,表中的所有数据都保存在一起,但表中的数据越多,对表的操作就越慢。 另一方面,分区表将一个表中的数据保存在不同的位置。 这将带来以下好处。
1 .减少了表中数据损坏的可能性,数据分散到了不同的地方。 此外,还可以对不同的分区分别进行备份和恢复操作。
2 .为了提高io性能,可能将表分开后保存到其他磁盘。 现在,可以并行读取表中的数据。
表中的数据大于2G时,建议使用分区表。
分区表的类型
既然把一个表中的数据分散到不同的地方,你可能会想,用什么标准来划分呢? 总共有这样四种标准。
Oracle分区表分为四类。 范围分区表; 列表分区表; 散列分区表; 组合分区表
范围分区表
从一列的值判断,将不同的行保存在不同的地方
假设您创建了一个分区表,并使用列id的值来确定分区
createtablepart_TB(idnumber,infovarchar2) 500 ) (partitionbyrange(id ) ) ) ) ) ) ) ) ) )。
(
partition part1values less than (100 ) tablespaceusers,
partition part2values less than (200 ) tablespacesystem,
partition part3values less than (max value ) tablespacesystem
)
在表格中插入以下两行数据
insertintopart_TBvalues(38,’vlaue sis 38’); 保存到分区第1部分
insertintopart_TBvalues(520,’vlaue sis 520’); 保存到分区第2部分
搜索数据
分区表可以作为普通表进行操作。 select * from part_tb; 返回两行数据
但是,也有特殊的操作,可以直接指定要搜索哪个分区的信息
slect * from part _ TB partition (part1); 在这种情况下,仅返回id小于100的数据
修改分区
(注:此时更改分区对所有类型的分区表都有效。)
添加分区
如果在创建表后突然想在原始表中添加分区,则可以
altertablepart _ tbaddpartitionpart4values less than (300;
但是,执行发行会报告错误,并提供提示
ora-14074: partitionboundmustcollatehigherthanthatofthelastpartition
因为以前做表的时候用了lessthan(maxvalue )。 没有这个的话东东可以追加
那么,如果出现这种情况,该如何解决呢? 有两种方法。 一个是从添加中删除分区part3,另一个是剥离分区。
删除分区
altertablepart _ tbdroppartitionpart 3;
分割分区:分割区
分区: merge整合
列表列表的分区表
列表分区也与范围分区类似,但范围分区一般适用于某些数字范围,而列表分区通常用于确定某些字符串。
如果创建了表,请判断城市信息并对其进行分区
createtableuser_info(idnumber,user_namevarchar2(500 ),city varchar2(100 ) ) (partitionbylist (city ) ) )
(
分区部件1值(Beijing ) tablespaceusers,
分区部件2值(Changsha ) tablespacesystem,
分区部件3值(default )表空间系统
)
插入数据
insertintouser_infovalues(1,’arwen’,’Beijing’); 第1部分
insertintouser_infovalues(1,’weiwen’,’Changsha’); 第2部分
搜索数据
select * fromuser _ info partition (部件2;
在这里,如果超大型的表中有用户信息的话,如果是普通的表的话,找某一类用户的信息会不会需要半天呢? 如果定为分区表,不是可以马上检测出结果吗?
散列散列分区表
前文所述的范围划分表、列表划分表都可以以某一列具有确定的信息为依据。 但是,如果某一列的信息杂乱无章的话,在随机的区分下想怎么整理呢? 这可以用散列来区分。
假设您要创建以下散列分区表
create table order _ info (order_number number,infovarchar2(100 ) (partitionbyhash ) order _ number ) ) )。
(
partition part 1表空间用户,
partition part 2表空间系统
)
插入数据
insertintoorder_infovalues(12,’buy car’);
insertintoorder_infovalues(888,’buy house’);
搜索数据
select * from order _ info partition (部件1;
因为数据是随机访问的,所以不能保证哪一行存储在哪个分区中
组合分区表
综合以上三种划分方法,大的划分之下又有小的划分。
Oracle 10g提供了以下两种组合方法
高贵的电灯胆复合分区(range-hash ) )。
范围-列表复合分区范围列表
在Oracle 11g中
添加了范围、列表范围。
list-list、list-hash和11g还支持间隔分区和虚拟列分区
举一个简单的例子来看看范围列表复合分区(range-list )。
create table compound (arrange _ id number,list_infovarchar2(500 ) )
partitionbyrange(arrange_id ) subpartitionbylist (list _ info ) )。
(
分区部件1价值最大挑战(100 ) )。
(subpartition part 11 values (‘car’)、
subpartition part 12 values (default )
请参阅。
partition part2values less than (200 )。
);
插入数据
insertintocompoundvalues(50,’car’;
insertintocompoundvalues(60,’books’;
搜索数据
select * fromcompoundpartition (part1) ) ) ) ) ) ) ) ) ) select * fromcompoundpartition (part1) ) ) ) ) ) ) ) ) ) 65
select * fromcompoundsubpartition (part 11 ) ) ) ) ) ) ) select * fromcompoundsubpartition (part 11 ) ) )