当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时可以考虑对表进行分区。
建立分区表:
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)
);