有个大表,数据3.8G,一个索引2.2G。需要将数据和索引分别移动到新建立的表空间。
首先ALTER TABLE BIG_TABLE MOVE tablespace TS_1。执行时长 812.75 seconds然后ALTER INDEX I_BG1 REBUILD tablespace TS_2。执行时长 1325.343 seconds
也就是REBULID索引比MOVE表本身多花约一倍的时间!
在REBULID过程中,我观察到:TS_2的使用空间也不并非如我所料-从一开始就不断增长,而是开始很长时间都不增长,过了很长时间后,才开始逐渐增长。
这应该意味着:首先在原表空间内REBUILD,然后再MOVE到新表空间呢?
早知如此,还不如drop index然后直接重建到新表空间中呢!因为表被MOVE后,索引已经是UNUSABLE状态了。
现在想想,在alter index xxx rebuild 后指定tablespace xxx并不会低效:
1)如果不指定新表空间,ORACLE会将rebuild的结果存放到当前表空间;
2)如果指定新表空间,ORACLE就将rebuild的结果存放到新表空间。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9844649/viewspace-580053/ ,如需转载,请注明出处,否则将追究法律责任。