oracle 表分区数目,(原创)Oracle分区表,数据平均分布技巧

我想大家都知道Oracle对表的数据存储有个关于分区存储的一个机制,如果读者对于分区不是很了解的可以建议使用GOOGLE下,基本上都会有详细的介绍,这里大致简单讲下,Oracle表有三种分区存储方式:HASH、RANGE、LIST。使用这三种方式基本情况下是由于表的数据量太大,频繁访问表中的数据,大大的增加了ORACLE的I/O,使得ORACLE的性能低下,当然普通的500W条以下的数据量就不需要考虑这三种方式。RANGE这种分区方法,个人感觉对于处理大量数据中某些数据近期发生的数据,这时对于范围分区这就有很大的好处,对于ORACLE来说减少I/O,ORACLE性能自然也就能得到提高了;Hash这种分区方式是针对表中的一字段进行HASH分散,按一定的方式就数据进行分配;LIST这种分区方式只能依据某个字段的几个固定的值进行分区。

通过上面的介绍,大家就知道针对数据量大的表的有三种的存储方式,但是还是有点过于理论,下面会举几个例子让大家能更加清楚了解。我们就先来说LIST这种分区方式,通过以下方式能使某海量数据进行平均分配各个分区表中,我们马上开始实验:

[code=sql]

create table e_test(id0000 number(3),tname0 varchar2(8),remark varchar2(100))

partition bylist(id0000)

(partitionpart_01 values(1) tablespace user01;

partitionpart_02 values(2) tablespace user02;

partitionpart_03 values(3) tablespace user03;

partitionpart_04 values(4) tablespace user04;

partitionpart_05 values(default) tablespace user05;

)  ;--注:如果你想使用系统默认的表空间,就直接把tablespace user0*后面去掉。

[/code]

上面将表按LIST分区方式对表的数据存储分为5个区。比如现在想往表中插入100W条数据,怎么能确保每个分区都为20W条数据?

下面有两个方式,一种借助于ORACLE的SEQUENCE,一种直接用个变量来控制也可以,但是如果要是有涉及多个客户或多进程操作数据这个时候使用SEQUENCE比较安全。下面就使用SEQUENCE下吧。

CREATE SEQUENCE seq_test

INCREMENT BY 1

START WITH 1    -- 从1开始计数

MAXVALUE 99999999999999999999

NOCYCLE

CACHE 10;

i number(20):=0;

while(i<=1000000) loop

insert into e_test values(mod(seq_test.nextval,5,'test',null);

if (mod(i,1000)) then

commit;

end if;

end loop;

commit;

--完成100W条数据插入

现在校验下每个分区有多少条数据。

select count(1) from e_test partition(part_01);

select count(1) from e_test partition(part_02);

select count(1) from e_test partition(part_03);

select count(1) from e_test partition(part_04);

select count(1) from e_test partition(part_05);

你会发现数据是均匀分配的。

上面着重讲了关于LIST分区表的平均数据分配存储。如果你使用HASH方式,你会发现前几个分区数据差不多都10多W条,最后一个分区数据会最多。不过如果把分区分成了64个,就会很明显,你会在后面几个分区发现都会没有数据。所以使用HASH数据有可能不是平均分配的,具体的要看对某一列的hash进行计算。

62dead9173311677ba85ab377cf9f4b2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值