Удалить столбец или заново создать таблицу, используя необходимый столбец: что лучше?

Мне нужно отбросить около 200 столбцов (не проиндексированных) из таблицы. Таблица содержит огромные записи (около 3 миллионов). Я попробовал два разных подхода для удаления этих столбцов:

  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. Повторно создал таблицу с необходимыми столбцами и импортировал записи из исходной таблицы.

Но оба подхода требуют много времени для завершения (около 30 минут / таблица), и у нас есть около 10 таблиц для выполнения этого действия в течение 4 часов простоя в среде prod.

Я хочу знать, есть ли другой способ, которым я могу использовать для удаления этих столбцов, или если два вышеупомянутых являются единственным способом, то каков наилучший способ удалить эти столбцы из таблицы:

После удаления у нас есть какая-либо команда для реорганизации структуры таблицы? Я использую оракула 11g. Спасибо за помощь.

1 ответ

Решение

Лучше создать таблицу из необходимых столбцов из конкретной таблицы, как показано ниже

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,

Если все в порядке, то вы можете delete исходная таблица.

Другие вопросы по тегам