我有一个表TEST,其中有4100万条记录。
此表中有两个我感兴趣的主要列:
表Test使用名为PART_DATE的分区列进行范围分区,其中一个分区有一天的数据。
我尝试使用以下方法完成工作:
ALTER TABLE TEST ADD MESSAGE_C VARCHAR2(2048);
UPDATE TEST SET MESSAGE_C = MESSAGE;
COMMIT;
ALTER TABLE TEST DROP COLUMN MESSAGE;
ALTER TABLE TEST RENAME COLUMN MESSAGE_C TO MESSAGE;
但是我在步骤2停留了大约4个小时。我们的DBA表示,由于进行了全表扫描,因此被阻止了。
有人可以告诉我吗
答案 0 :(得分:2)
考虑使用INSERT INTO SELECT快速创建具有新名称的新表,然后在创建表后添加索引,删除旧表,并将新表重命名为旧名称。
这是DML操作,因此它将显着提高速度,并且不会因服务器日志记录设置而变慢。
最近我已经使用这种方法来更改具有5亿条记录的表。