当前位置:数据库 > Oracle >>

Oracle分区表类型用法

Oracle分区表类型用法
 
分区表的用处
我们oracle中的表数据最终是保存到磁盘文件中.默认情况下表中的数据都是放到一起的,但表中的数据一多,对表的操作就会变得较慢.而分区表是把一个表中的数据保存到不同地方去.这样会带来如下好处.
 
1.减小表中数据损坏的可能性,数据分散到不同地方了嘛.另外可以单独对不同的分区做备份与恢复操作.
 
2.提高IO性能,表分我后可能就保存到不同的磁盘上去了.这样可以并行的读取表中数据.
 
当表中数据大于2G时建议使用分区表.
 
分区表类型
我们可能会想到既然要把一个表中数据分散到不同地方,那根据个啥标准来分呢.总共有这么4大类标准.
 
Oracle分区表分为四类:范围分区表;列表分区表;哈希分区表;组合分区表
 
range范围分区表
就是根据某一列的值来做判断,把不同的行保存到不同的地方
 
假如创建一个分区表,以列id值来做判断依据分区
 
createtable part_tb(idnumber, info varchar2(500))partitionbyrange(id)
 
(
 
partition part1 valueslessthan(100)tablespaceusers,
 
partition part2 valueslessthan(200)tablespacesystem,
 
partition part3 valueslessthan(maxvalue)tablespacesystem
 
)
 
往表中插入如下两行数据
 
insertinto part_tb values(38,'vlaues is 38');  --存入分区part1
 
insertinto part_tb values(520,'vlaues is 520'); --存入分区part2
 
查找数据
 
我们可以把分区表当作一般表来操作.直接查询select * from part_tb;--返回两行数据
 
但还有一种特殊操作,直接指定查找哪个分区中的信息
 
select *from part_tb partition(part1); --此时只返回id小于100的数据
 
分区的修改
(注:这时的分区修改是针对所有类型的分区表有效)
 
添加分区
 
假如你创建表之后又突然想在原有的表上增加分区可以这样
 
altertable part_tb addpartition part4 valueslessthan(300);
 
不过你执行下发会会报错,会提示
 
ORA-14074: partition bound must collate higher than that of the last partition
 
因为之前创建表时你用到了lessthan(maxvalue).如果没有这个东东就能成功添加
 
那现在出现这种情况时怎么解决呢,有两种方法,一是先删除分区part3于添加,另一个是split分区.
 
删除分区
 
altertable part_tb droppartition PART3;
 
拆分分区 :split
 
合并分区: merge
 
list列表分区表
列表分区跟范围分区也类似,只不过范围分区一般适用于针对一些数值范围,而列表分区一般用于判断某些字符串.
 
假如创建一个表,通过判断城市信息来分区
 
createtable user_info(idnumber, user_name varchar2(500), city varchar2(100))partitionbylist(city)
 
(
 
partition part1values('BeiJing')tablespaceusers,
 
partition part2values('ChangSha')tablespacesystem,
 
partition part3values(default)tablespacesystem
 
)
 
 
 
插入数据
 
 
 
insertinto user_info values(1,'arwen','BeiJing');--part1
 
insertinto user_info values(1,'weiwen','ChangSha');-- part2
 
 
 
查找数据
 
select *from user_info partition(part2);
 
 
 
看到这里你是不想到如果一个超级大的表中有用户信息,如果是普通表要查找某一类用户的信息要等半天才有反应.弄成分区表是不是可以一下子就查出结果来了啊.
 
 
 
hash哈希分区表
前面讲的范围分区表,列表分区表都是某一列具有确定的信息可以做为依据.但假如某一列的信息是杂乱无章的,你想让随机分区下咋整呢.这就可以用哈希分区.
 
假如创建如下哈希分区表
 
createtable order_info(order_numbernumber, info varchar2(100))partitionbyhash(order_number)
 
(
 
partition part1tablespaceusers,
 
partition part2tablespacesystem
 
)
 
 
 
插入数据
 
insertinto order_info values(12,'buy car');
 
insertinto order_info values(888,'buy house');
 
 
 
查找数据
 
select *from order_info partition(part1);
 
 
 
由于数据是随机存取的所以你不能保证哪些行存到哪个分区.
 
 
 
 
 
组合分区表
综合上面三种分区方法,大的分区下面又有小分区.
 
在Oracle 10g中有如下两种组合方法
 
范围-哈希复合分区(range-hash)
 
范围-列表复合分区(range-list)
 
 
 
在Oracle 11g中
 
又增加了range-range,list-range,
 
list-list,list-hash,并且 11g里面还支持Interval分区和虚拟列分区
 
 
 
下面举个简单的例子看下范围-列表复合分区(range-list).
 
 
 
createtable compound(arrange_idnumber,list_infovarchar2(500))
 
partitionbyrange(arrange_id)subpartitionbylist(list_info)
 
(
 
partition part1 valueslessthan(100)
 
(subpartition part11 values('car'),
 
subpartition part12 values(default)
 
),
 
 
 
partition part2 valueslessthan(200)
 
);
 
插入数据
 
insertinto compound values(50,'car');
 
insertinto compound values(60,'books');
 
 
查找数据
 
select *from compound partition(part1)
 
select *from compound subpartition(part11)
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,