表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.   


    已经说了,data_id和c_time联合做局部索引(唯一所索引)会来插入数据效率问题。而uuid不是分区字段,也不能做局部索引吧
      

  2.   

    1.从表设计的合理性来看,尽量不要用没意义的字段来做主键,建议你删掉uuid列,data_id和c_time做联合主键,并以data_id和c_time联合做局部索引。2.可以选择在晚上执行:
    alter table table_name drop partition xxx update global indexes;
      

  3.   

    uuid是主键、且无任何意义,为何不干脆drop该字段?主键也不是必须有才行……如果你能从业务控制不出现重复数据,并且有索引支持查询性能——我觉得,主键不要也罢
      

  4.   


    uuid当时加上去的确考虑欠妥。之所以没删,考虑是到对web的影响。
    目前,一个多月的数据用update global indexes还行。一张表花了大概5min左右,等数据量达到一年,估计就不行了。
      

  5.   

    如果有应用使用了uuid列不便删除的话,可以考虑保留字段删除主键