日期:2014-05-17  浏览次数:20974 次

Oracle 删除分区带来索引失效
表data_01,有uuid,data_id,c_time以及其他一些字段。其中,uuid是主键,且是无任何意义。
采用组合分区。以c_time字段的区间分区和以data_id字段的散列子分区。同时,data_id和c_time可以唯一确定一条记录。


这样的表大概有10个,data_02....data_10。每个表中的data_id大概有1万。即共有10万个data_id,而每个data_id,每30秒会有一条数据。

现在,表中的数据过多,想删除一些分区。由于uuid是主键,其对应的有唯一索引,是全局的。删除会使全局索引失效,而重建索引又很慢。
如果换做data_id和c_time做联合主键,并以data_id和c_time联合做局部索引,可以解决删除分区带来索引失效的问题。但又会带来向表中插入数据很慢的问题。


不知道有没有更好的办法解决删除分区?
初次接触Oracle,还请各位大牛多多指教,。。。。
oracle 删除分区 索引

------解决方案--------------------
用“局部索引”代替“全局索引”即可解决问题!
------解决方案--------------------
1.从表设计的合理性来看,尽量不要用没意义的字段来做主键,建议你删掉uuid列,data_id和c_time做联合主键,并以data_id和c_time联合做局部索引。

2.可以选择在晚上执行:
alter table table_name drop partition xxx update global indexes;
------解决方案--------------------
uuid是主键、且无任何意义,为何不干脆drop该字段?

主键也不是必须有才行……

如果你能从业务控制不出现重复数据,并且有索引支持查询性能——我觉得,主键不要也罢。。。