近日遇到一个案例,是客户detach一个分片表的时候,非常慢,detach的分片大约有600万行数据,全表有4000多万行数据。
我认为DETACH是一个DDL操作,应该很快才对呀。
于是索要detach语句和表结构,如下:
alter fragment on table tab_name detach part201805 part201805_tmp;
很快就可以发现问题出在第一个唯一索引上,该索引是一个detached索引,每次在删除分区之后,该索引的平衡二叉树需要重新平衡,代价极大。
于是在该索引上增加一个tx_date字段,重建索引即可。