Oracle的分区
Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大。对表中数据的查询、表的备份的时间将大大提高,以及遇到特定情况下,要对表中数据进行恢复,也随之数据量的增大而花费更多的时间。这个时候,Oracle数据库提供了分区这个机制,通过把一个表中的行进行划分,归为几部分。可以减少大数据量表的管理和性能问题。利用这种分区方式把表数据进行划分的机制称为表分区,各个分区称为分区表。
Oracle的分区的作用
Oracle分区对于大型表(大数据量)非常有用
- 改善大型表的查询性能,因为可以通过查询对应分区表中对应的数据,而不需要查询整个表
- 表更容易管理,因为分区表的数据存储在各个分区中,所以可以按照分区建,来管理对应分区当中的数据,可以按照分区加载和删除其中的数据,比如在不分区情况下,更容易管理数据。以及在特定的事故情况下,通过备份好的分区,可以快速恢复对应分区当中的数据,也不需要对全表数据进行恢复
- 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能
Oracle分区方法
- 范围分区:范围分区就是对表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储到那个分区上,如根据日期进行分区
- Hash分区:散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
- List分区:当你需要明确地控制如何将行映射到分区时,就使用列表分区方法,与范围分区和散列分区所不同的是,列表分区不支持多列分区,如果要将表按列分区,那么分区键就只能由表的一个单独的列组成,然而可以用范围分区或散列分区方法进行分区的所有的列,都可以用列表分区方法进行分区。
- 组合分区
1.范围分区
范围分区就数据基于指定的分区映射到每一个分区中,这种分区方式最为常用,且常常采用日期作为分区键
注意:
- 每一个分区都需要有一个values less than子句,它指定了该分区的上限值(即该分区能接受的分区键的最大值)。记录里分区键的值小于这个上限值时,该记录会被放入该分区,而当记录里分区键的值等于或大于这个上限值时该记录会被放入下一个上限值更高的分区中。
- 所有的分区里,除了第一个分区,其他分区其实都有一个隐式的下限值(即该分区能接受的分区键的最小值),这个下限值就是上一个分区的上限值
- 在最后一个分区中,可定义上限值为maxvalue(该值可理解为所有分区中的一个最大上限值,包括空值),当记录分区键的值大于之前所有分区的上限值时,这条记录会被放入这最后一个分区中。
示例:
-- 创建实例表 create table range_example ( id number(2), done_date date, data varchar2(50) ) -- 创建分区,分区键为示例表(range_example)中的done_date字段 partition by range(done_date) ( partition part_1 values less than(to_date('20220101','yyyymmdd')), partition part_2 values less than(to_date('20220201','yyyymmdd')), partition part_3 values less than(maxvalue) )
查看分区表中的信息:
select * from USER_TAB_PARTITIONS where TABLE_NAME='RANGE_EXAMPLE';
insert into range_example values(1,to_date('2022-09-28','yyyy-mm-dd'),'union'); insert into range_example values(2,to_date('2022-01-28','yyyy-mm-dd'),'l3'); insert into range_example values(3,to_date('2022-02-28','yyyy-mm-dd'),'z4');
参考:https://zhuanlan.zhihu.com/p/401808404
标签:49,分区,限值,date,range,values,Oracle From: https://www.cnblogs.com/zmc60/p/17020282.html