Oracle之表分区、分区索引(二)

其实range分区你学会了,其他的分区你也学会了,在这我就不敲了,咱们简单来看一下,hash分区,hash分区实现

负载均衡,平均分配值进行分区,那这个哈希就是平均分配的,也是一张表,还是partition by,只不过是变成hash了,然后根据咱们的

分区字段,然后进行p1和p2,这回就直接写p1,p2,p3,p4,但是我先做没有去指定范围,但是这个数据就会平均分布,然后他也是照样可以

去添加分区,这都是可以的,只不过是平均分布,然后类似于这种方式,看一下,用hash分区,平均分,就是p1这个里面5条数据,你如果插

10条数据,p1里面5条,p2里面5条,就是这个意思,这个很简单

还有一种是list分区,它是按照区域去划分的

比如说create一个table,partition by list分区,按照城市去分区,给partition取个名字,east,west,按照这种去分,

比如这是tianjin,这是dalian,按照天津和大连去分,按照字段值区分,east这只是一个名字,跟其他的没关系,然后现在是按照city

这个值去分的,我们可能会往这个表里灌数据,灌一千头,一万条,你要是tianjin的,数据进来一条tianjin的,或者是dalian的,

我就把数据放到east,这个只是一个分区的名字,你如果要是xian的,我就放到west里边,你要是上海呢,我就放到south里边,

你要是herbin,我就放到north这个区间里,others就放到other里,这个就是按照一个字段的不同表现形式,然后阈值去划分的,

他其实和range有点像,只不过是一种更好的分区的手段吧,可能我insert了5条记录了以后,我查一下分区,那你看我insert了

5条记录了,那我就查一下east,east就是tianjin,dalian,相当于把所有天津和大连的,这个数据查出来了,如果你查这条SQL的话

select * from personcity partition(east);查出来就有这个效果,这个是list分区
然后就是复合分区

其实部门分区怎么说呢,因为我是不怎么去建list分区,它是把范围分区和散列分区进行相结合,两种分区结合起来

做这个划分,范围分区和散列分区相结合,都是可以的,就是范围分区range,range和hash组合,这边是range分区,这边是hash分区

进行一个组合,或者是范围分区和列表分区list分区,他们两个之间也可以做一个组合,有各种各样的组合,然后这块你看我怎么做的

我这里正常来讲是一个table,建立一个range分区,在最外层建一个range分区,按照这个number,就是最外层按照一个Number做一个

range分区,然后里边有一个subpartition子分区,分区里面再套一个分区,按照这个hash,再给我平均分区,按照这个sname,我可以走

两个字段,去做分区,比如number等于1的,这个可能不是主键,随便举个列子,number等于1的有好几条记录,number等于1的可能有10条

记录吧,这10条记录都可以放到一个空间里了,number等于2的呢,这里也有10条,然后number等于1或者number等于2,在最开始的range

分区的基础之上,我在这个分区里面还可以分成4份,hash subpartition 4,好像不是这么说的,再往下看,是这样的,就是这4份是平均

的,接下来我看range是怎么去划分range的,range我分成是这样的,如果ID号小于1000,0到1000这些数据,放到外层的一个分区,然后

1000到2000放到最外层的分区,他这里有点别扭,语法就是这样的,没办法,我再描述一下,就是一开始,先看这个,

partition by range(sno),一个range分区,把数据切分成了三份,第一份是0到1000,第二份是1000到2000,第三份是2000以上,

2000加,大体上分了三个区间,然后我又做什么事了,其实这块我们再看一下,subpartition by hash(sname) subpartition 4,

一个区间按照name去分区,分成4份,其实是这样的,4小格吗,按照name哈希分区,应该是平均分配的,这个是关于复合分区,范围分区

和list分区怎么去整合,你这块就不是平均了,就是按照list去分区,都可以去做组合的,list里面指定太麻烦了,有没有什么快速

的方法来指定,这个就没有了,list其实怎么说呢,比如说省份,一共就那几个省份,你采用list分区,就是按照不同的业务去划分

不同的分区,分区也不是说非得选哪一种,按照真实的业务你自己去选择,刚才这块没问题吧

接下来我们看一下间隔分区,其实工作中正常来讲,间隔分区是用的比较多的,一般我也是会用到间隔分区,其实很多

数据结构我都会用到间隔分区,间隔维度主要是可以按照时间维度去进行分区,这是我最喜欢的事情,它是11g以后才出来的

新特性,在实际工作中也是非常常用的,Interval分区,Interval Partition,这也是ORACLE一项非常引以为荣的技术,可以动态的

去指定分区,让高效的海量处理数据成为可能,他其实是range分区的一个延展,一个扩充,最终实现了range分区的一个自动化,咱们

同学想一想,range分区你得手写上P1,P2,P3,...,不够了还得alter table,add partition,那现在这种间隔的分区,可以写好了函数

以后,他自己可以去进行分区,咱们可以看一下,create table,table名字叫做interval_sale,这个东西可以直接运行的,在这里咱们

说range,range的一个升级版吧,叫做interval分区,它是可以去实现一个自动化分区

现在这个语句已经写好了,首先create一个table叫做interval_sale,然后指定两个字段,一个sid,和sdate,你注意看

我们这里又一个date,他是一个timestamp类型的,有一个时间戳,然后我现在进行partition的时候,sdate时间进行

分区,然后下面有一个函数,这个函数的目的就是,这个函数就是ORACLE里面的函数了,举个例子,这个函数的最终执行

结果呢,其实就是月份,SELECT numtominterval(1,'MONTH') FROM DUAL;

是按照0到01这个月份,做一个分区的,他自己回去累加的,举个例子吧,你只要放一个分区的起始点即可,

先DROP掉已经存在的,我要建的range分区,其实我在以前就建立过一遍了,就是这张表,interval_sale,这张表,包括这种

分区模式,在我们上课之前已经建立过一遍了,听好我要问的问题,刚才我把那张表给drop掉了,那现在请问,我要做这个事情,

SELECT * FROM user_tab_partition,那我问你,之前建立的interval分区,还存在吗,能理解我说的意思吗,N多年以前,已经建立

range分区这种表了,但是我刚才把他drop掉了,drop掉之后,range分区还存在吗,我已经把表都删了,那分区还存在吗,问你一下,

能理解我说的意思吧,咱们看一下,看见了吧,可能你看不出来

这个东西已经变样了,但是这个东西还是存在的,flashback,闪回咋写的,我有点忘了,我记得在同义词里面有,

flashback table 表名 to before drop;我要把这张表还原回来,然后to before drop,能理解我的意思吧,flashback

哪张表啊,其实之前我建了interval_sale,然后to before drop,我要做这个事情,flashback table interval_sale

to before drop,我要做这个事情,然后我又回来了

然后去查询,看到了吧,那你告诉我,分区之后,他到底存不存在啊,是不是还是存在的,能理解我说的意思吧,因为

什么啊,因为ORACLE里面有好多闪回机制,你把表drop了以后,我物理的分区其实还是一直存在的,如果你做什么事啊,

除非你purge recyclebin

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/90203793
今日推荐