使用必需列删除列或重新创建表:哪个更好?

时间:2015-02-19 09:13:11

标签: sql oracle ddl

我需要从表中删除大约200列(未编入索引)。该表包含大量记录(约300万)。我尝试了两种不同的方法来删除这些列:

  1. 使用“alter table drop column ...”语句单独删除列。 例如:ALTER TABLE AO_PO_DTL_SCHEDULE_BKP1 DROP(shipto_jurisdiction_code,mark_po_box,..); 要么 ALTER TABLE AO_PO_DTL_SCHEDULE_BKP4 SET UNUSED(shipto_jurisdiction_code,mark_po_box,...) ALTER TABLE AO_PO_DTL_SCHEDULE_BKP4 DROP UNUSED COLUMNS;
  2. 使用所需列重新创建表并从原始表中导入记录。
  3. 但是,这两种方法都需要很长时间才能完成(大约30分钟/表),而且我们有10个表可以在生产环境中的4小时内完成此活动。

    我想知道我可以使用任何不同的方式删除这些列,或者如果上面两个是唯一的方法,那么从表中删除这些列的最佳方法是什么: < / p>

    在删除后,我们有任何命令重新组织表结构吗? 我正在使用oracle 11g。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

最好从特定表中的必需列创建表,如下所示

create table sample_cpy 
as
select sno,name,dept from sample;

如果您只想使用下面的表结构

create table sample_cpy 
as
select sno,name,dept from sample where rownum < 1;

以上方法不会创建任何index,primary,foriegn key etc

如果everthing似乎没问题那么你可以delete源表。