Удалить столбец или заново создать таблицу, используя необходимый столбец: что лучше?
Мне нужно отбросить около 200 столбцов (не проиндексированных) из таблицы. Таблица содержит огромные записи (около 3 миллионов). Я попробовал два разных подхода для удаления этих столбцов:
- Отдельно отбрасывал столбец с помощью оператора "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;
- Повторно создал таблицу с необходимыми столбцами и импортировал записи из исходной таблицы.
Но оба подхода требуют много времени для завершения (около 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
исходная таблица.