Oracle分区表小结

来源:互联网 发布:网络增值业务推广方案 编辑:程序博客网 时间:2024/05/22 03:42

【摘自其他】一、分区表理论基础

       Oracle partition 的出现最早出现在8.0.5这个版本中,8.0.5是Oracle8版本中第一个发行版本,在8.0.5之前的8.0.1,8.0.2,8.0.3,8.0.4都是Oracle的内部测试版,外界是看不到的,8.0.6是Oracle8的的最后一个版本,下面的版本都开始有自己的特点了如8i,9i,10g,11g,12c等等。
      当初这个特性在Oracle8上一出现的时候,数据库市场上是一片惊奇和赞叹啊。这个特性为Oracle当年赢得了很多大单,Oracle 靠着这些特性逐步的赢得了市场,从市场的竞争者,变成了领导者,最后变成了独霸者。以至于今天的稍微大一点的都在使用数据库的之一特性。而Oracle对这一特性也在不停的深耕。
      从Oracle8 中8.0.5版本中的单一的范围分区,到Oracle8i 8.1.5中引入了 hash分区,并发展处复合分区,后来Oracle又加入了list分区,在9i到10g,11个,12c中一直在不停的完善和成熟,以致于今天的投入运行的Oracle数据库,几乎没有不用到Oracle分区的功能的。

    Oracle Partition 的出现是为了解决超大数据问题,20年前的VLDB(VeryLargeDataBase)的热度一点都不必今天的云少啊。只不过当年的IT技术没有今天的普及,行外人不知道罢了。想当年DEC(Digital Equipment Corporation)在业界第一个推出64位处理器的时候,就有了VLDB的概念,当时Dec和Oracle可以说在产业界是双剑合璧无人能敌64位的操作系统+64位的数据库,在超大数据领域秒杀一切竞争对手。可惜了DEC的运营团队没有把这个利器用好,市场管理不善,Dec先被卖给Compaq,后被卖给HP。其核心资产Alpha芯片后来被卖给三星,再后来听说神威的处理器有alpha芯片的影子,这都是另外一个话题了。64位处理器的出现,是Partition分区技术出现的技术前提。 在32位系统的时候最大的寻址空间只有2**32=4294967296=4GB这么大的寻址空间,不需要考虑考虑分区的问题。想当年我装Oracle数据库的时候,那台服务器只有16MB的内存。没错是16MB,不是16GB,所以Bill Gates同志说个人电脑有64k内存就够了。今天这句看起来就像是白痴的笑话,当年多少人认为是真理啊。

说完了分区技术出现的物理基础,那就是64位计算技术的出现。
       再说说分区技术出现的现实需求和和理论基础。
开始的时候,计算机的出现是为了解决复杂的数值计算问题,譬如最早的ENIAC,就是使用很少的数据,做复杂的迭代来解决弹道的计算问题,其输入输出数据都很少,主要是完成一个计算过程。用现代计算机的话说,这种复杂应用基本上只消耗CPU,几乎不消耗内存和IO。后来随着软件技术的发展慢慢的出现了数据库管理技术,计算技术也从军用领域进入到民用领域,从科学研究的阳春白雪变成了日常管理的柴米油盐。特别是电信技术和管理理论的发展对数据库的要求也不断的提高。
       举个例子,一个拥有1,000,000用户的电信运营商(一个地级市的容量),每月的每用户有100张话单(每天3到4个电话,不多),每个话单有200个字节,则一个月产生的话单的容量约为200 * 100 * 1000000=20,000,000,000,即20GB,就轻易的突破了32位系统的4GB限制,考虑到一个营业或计费系统涉及到多个表,则数据库的大小,业务的需求远远的超出了当时系统的处理能力。
       在管理方面,早期的企业管理软件只有财务模块,后来慢慢的有人事模块和库存库存模块,再然后有了制造资源规划MRP和企业资源规划ERP,数据也是在迅猛的增加。
这是数据库技术发展的现实需求。数据库的分区的技术其实比较好理解,大家都是知道数据库中的表其实就是一个二维表,从存储的和查询的角度看,可以把表简化看做是一个队列。在数据结构的这门课中,我们都知道对一个已排序(有索引)队列进行查询的时间复杂度是O=n lg n, 这里n可以看做是数据库中表的行数。
       假定一个有100,000,000行记录的表,在不分区的情况下,其查找一条记录的时间复杂度为O=100000000lg100000000而把他分成20个分区后,则其每个队列的平均长度变为5,000,000行,则查找一条记录的时间复杂度就变为O=5000000lg5000000 加上一次确定记录所在分区的操作。可见通过分区可以大大的所谓查找所需的时间,提高系统的执行效率。 这是分区出现的理论基础。

    二、分区表

Oracle分区分为1、哈希分区 2、范围分区 3、列表分区 4、范围-列表复合分区  5、范围-哈希复合分区

 范围分区:比较广泛的一个分区,常见的是拿一个列的值作为分区的划分条件,将值存放到列值存在的范围分区中,比如把二月的数据放在一个分区,三月的数据放在另一个分区,这就需要指定分区的列和范围。

哈希分区:对于无法指定范围的表,可以使用hash分区,hash分区会把表中的数据平分到指定的几个分区中,列所在的分区是根据hash值自动分配,hash可以支持多个依赖。

create table test

(

transaction_id number primary key,

item_id number(8) not null

)

partition by hash(transaction_id)

(

partition part_01 tablespace tablespace01,

partition part_02 tablespace tablespace02,

partition part_03 tablespace tablespace03

);


列表List分区:List分区是要指定分区的列值,而且分区列只能选择一个

create table custaddr
(

id varchar2(15 byte) not null,

areacode varchar2(4 byte)
)

partition by list (areacode)
( partition t_list025 values ('025'), 
partition t_list372 values ('372') , 
partition t_list510 values ('510'),

partition p_other values (default)

)



组合分区:根分区只能是range分区,子分区可以是list分区也可以是hash分区。如果某表按照某列分区之后,仍然较大,或者是一些其它的需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。

http://blog.csdn.net/hijiankang/article/details/9173877/


原创粉丝点击