赞
踩
最近在做的一个项目,由于涉及到数据量会在半年内破千万条,考虑到数据量比较大,日后查询起来会比较费时,所以考虑使用oracle的分区特性。oracle10g产品中的分区表分为List,hash,range三个。
经过分析,我的数据表Test_table_name中的SPCODE列的值是若干个固定不变的,而且该列不会被更新到。这样它符合List分区的特性。所以决定使用list分区来做。有一点需要注意的是,我们必须在建立表时进行分区,而不能在建完未分区的表后,添加分区。当然oracle提供了重定义表的方式可以用来重新分区,但它会删除所有数据。
建立分区表:
create table test_table_name(spcode varchar2(8), time date, ……) partition list(spcode)(
partition 分区1 values('sp01'),
partition 分区2 values('sp02')
)
可以使用 select * from user_tab_partition 查看分区情况
在list分区后,假如还有新的分区键值进来,这时我们有这种处理方式:
1,使用默认分区。
2,添加新的分区。
第一种的语法是 alter table test_table_name add partition 新分区3 values('sp03')
第二种的语法是 alter table test_table_name add partition 默认分区 values(default); -- default为oracle关键字
这里需要注意的是,如果一旦使用了默认分区,那么在下次我们想添加新分区时,有可能就会报错。因为新的分区的值可能在默认分区中出现过。
在建立完分区后,这个时候,我可以认为建立了几个表格(类似一个分区就是一个表),所以为了提高查询效率,我们还可能会建立索引,在分区中分为全局索引和分区索引。假如分区还会不断的新增的话,建议使用分区索引,这样不会在新增表时,破坏索引。
本地分区索引的语法:create index index_name on test_table_name(linkid) local;
或者 create index index_name on test_table_name(linkid) local (
partition 分区1, partition 分区2,…………
)
可以使用 select * from user_ind_partitions 来查看,是否已经建立成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。