oracle--分区

当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时可以考虑对表进行分区。

建立分区表:

create table partition_table (spcode varchar2(8),time date,....) partition list(spcode)(

    partition 分区1 values('sp01'),partition 分区2 values('sp02')

)

查看分区信息:select * from user_tab_partition 

添加新的分区:

alter table test_table_name add partition 新分区3 values('sp03')

alter table test_table_name add partition 默认分区 values(default);

为了提高查询效率,我们还可能会建立索引,在分区中分为全局索引和分区索引。假如分区还会不断的新增的话,建议使用分区索引,这样不会在新增表时,破坏索引。

在分区中建立索引:

create index index_name on test_table_name(linkid) local(

    partition 分区1,partition 分区2,....

)

分区的索引查询:select * from user_ind_partitions;

使用分区的优缺点:

1、改善查询功能, 2、增强可用性, 3.维护方便 4.负载均衡I/O


分区的类型和方法

1、列表分区 该分区的特点是某列的值只有几个,如:

pratition by list(status)(

        partition prob_active values('Active') tablespace prob_ts01,

        partition prob_inactive values('InActive') tablespace prob_ts02

)

2、散列分区    当列的值没有合适的条件时,这列分区是在列上使用散列算法,以确定将行放在哪个分区中,如:

partition by hash(col)(

        partition part01 tablespace hash_ts01,

        partition part02 tablespace hash_ts02,

        partition part03 tablespace hash_ts03

)

hash分区最主要的机制是根据hash算法来计算具体某条记录应该插入到哪个分区中,oracle如果你使用hash分区,只需指定分区的数量即可

3、组合范围散列分区  这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后在按某列进行列表分区,分区之中的分区成为子分区

partition by range(sales_date) subpartition by list(staus)(

        partition p1 values less than(to_date('2012-11-29','YYYY-MM-DD')) tablespace rptfact2012

        (

            subpaptition p1sub1 values('active') tablespace rptfact2012,

            subpaptition p1sub2 values('inactive') tablespace rptfact2012

        ),

        partition p2 values less than(to_date('2012-11-29','YYYY-MM-DD')) tablespace rptfact2012

        (

            subpaptition p2sub1 values('active') tablespace rptfact2012,

            subpaptition p2sub2 values('inactive') tablespace rptfact2012

        )


)

4、复合范围散列分区 基于范围分区和散列分区,表首先按列进行范围分区,然后再按某列进行散列分区,如:

partition by range(transaction_date) subpartition by hash(transaction_id) subpartitions  3 store in

(dinya_space01,dinya_space02,dinya_space03)

(

        partition part_01 values less than(to_date(‘2006-01-01’,’yyyy-mm-dd’)),
        partition part_02 values less than(to_date(‘2010-01-01’,’yyyy-mm-dd’)),
        partition part_03 values less than(maxvalue)

);

你可能感兴趣的:(oracle--分区)