Oracle分区表

       前言

        Oracle允许用户把一个表中的索引行分为几个部分,并将这些部分存储不同位置。可以通过直接通过分区表来访问特定分区提高性能。


什么时候使用分区

        当数据量过多时导致查询速度越来越慢,这时候可以使用分区将数据分为几个部分,这样查询数据时,不至于每次都扫描整张表。


1.范围分区

        以列的值的范围作为分区的划分条件,将记录存放到列值所在的range分区中。

create table 表名(
    ……
)
partition by range(字段名)
(
    partition p1 values less than (to_date('2013-04-1','yyyy-mm-dd')),
    partition p2 values less than (to_date('2013-10-1','yyyy-mm-dd')),
    partition p3 values less than (maxvalue)
)

        一般创建范围分区时,都会将最后一个分区设置为maxvalue,使其他数据落入此分区。4月1号之前的会落入p1分区,到10月1号之前不包括当天会落入p2分区。其他会落入p3。


2.间隔分区:

INTERVAL代表间隔

partition by range(字段名)
--年和月YM 1年 3月 根据插入的时间来判断,自动划分分区
INTERVAL(NUMTOYMINTERVAL(3,'MONTH'))
INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
--天和小时 DS 1天 根据插入时间不同天数都会创建分区
INTERVAL(NUMTODSINTERVAL(1,'DAY'))
系统会根据数据的情况自动创建分区,分区范围在    INTERVAL(NUMTOYMINTERVAL(范围,'类型'))

create table 表名(
    ……
)
partition by range(字段名)
--间隔、指定类型间隔距离
INTERVAL(NUMTOYMINTERVAL(3,'MONTH'))
--从哪个时间点开始间隔之后到了时间间隔距离开始自动创建一个新的分区
(partition p1 values less than (to_date('2013-04-1','yyyy-mm-dd')))

3.查看分区表和分区、查看当前表分区中的值
select * from user_tab_partitions;
select * from 表名 partition(分区名);

4.删除分区
delete from 表名 partition(分区名);