Oracle中有一张表,大小约为200GB,通过
ALTER TABLE table DROP COLUMN
列删除其中的列将需要15个小时以上。 有哪些方法可以加快速度,或者至少,如果不可能加快速度,如何正确地做到这一点?真的只是DROP COLUMN
吗?
Oracle 数据库 11g 企业版版本 11.2.0.3.0 - 64 位生产版
我读到过关于
SET UNUSED
的内容,但似乎是同一件事?相反,它不会物理地清除桌子,您仍然需要使用 DROP UNUSED COLUMNS
。 我还发现了一些关于SHRINK SPACE
的东西,但我不明白它是如何工作的以及如何使用它。应该和SET UNUSED
一起组合吗?尽管至少很明显这不能并行完成。唯一能做到的就是删除时不锁表
附注将一张表复制到一张新表不适合我们
P.S.S.我重新阅读了很多论坛,感觉不可能快速并行地做到这一点(例如,您可以并行创建索引 -
CREATE INDEX PARALLEL
)。但所有的问题和答案都是旧的,所以我决定提出一个新问题,希望有任何新的功能或程序
要么:
正如你所做的那样
ALTER TABLE table_name DROP COLUMN column_name
或
CREATE TABLE table_name_new AS
SELECT col1, col2, col3, col4 -- Excluding the column you want to drop
FROM table_name
然后:为新表添加索引、约束等;删除旧表;并将新表重命名为旧表的名称。