Мне нужно добавить 3 столбца со значением по умолчанию в таблицу с 1,70 миллиардами записей в Oracle 11g. Как лучше всего это сделать с минимальными затратами времени?
Добавление столбцов со значением по умолчанию в оракуле с миллиардами записей
Ответы (1)
Вы не можете получить повышение производительности при добавлении значений столбца. Если вы выбираете только подмножество строк, вы можете попробовать оптимизировать их там.
Если столбцы действительно имеют значение DEFAULT, то значение будет фактически помещено туда Oracle, когда вы INSERT и либо (а) не называете столбец в списке столбцов, либо (б) указываете его значение как DEFAULT:
CREATE TABLE MyTable (
Col1 NUMBER(5) DEFAULT 10 NOT NULL,
Col2 NUMBER(5) DEFAULT 20 NOT NULL,
Col3 NUMBER(5) DEFAULT 30 NOT NULL
);
INSERT INTO MyTable VALUES (DEFAULT, DEFAULT, DEFAULT);
INSERT INTO MyTable (Col2, Col3) VALUES (21, 31);
INSERT INTO MyTable (Col2, Col3) VALUES (22, DEFAULT);
INSERT INTO MyTable (Col1) VALUES (11);
SELECT * FROM MyTable;
COL1 COL2 COL3
----- ----- -----
10 20 30 <-- VALUES (DEFAULT, DEFAULT, DEFAULT)
10 21 31 <-- (Col2, Col3) VALUES (21, 31); Col1 defaults because not named
10 22 30 <-- (Col2, Col3) VALUES (22, DEFAULT); Col1 defaults because not named
11 20 30 <-- (Col1) VALUES (11); Col2 and Col3 default because not named
Так что нет необходимости проверять NULL, если это то, о чем вы беспокоитесь:
SELECT Col1, Col2, Col3, Col1+Col2+Col3 AS TotCols
FROM MyTable;
COL1 COL2 COL3 TOTCOLS
---------- ---------- ---------- ----------
10 20 30 60
10 21 31 62
10 22 30 62
11 20 30 61
Если ваш вопрос касается оптимизации для подмножества строк, добавьте дополнительную информацию.
person
Ed Gibbs
schedule
10.06.2013
По сути, мне нужно добавить новые столбцы со значением по умолчанию, чтобы существующая строка также обновлялась значениями по умолчанию в новом столбце. Здесь мы можем добавить нулевой столбец по умолчанию, а затем запустить скрипт, чтобы обновить значения столбца, а затем изменить значение столбца по умолчанию, но это занимает слишком много времени, так как он имеет 170 крор записей ИЛИ Мы можем напрямую добавить столбцы со значением по умолчанию, но это будет также занимает слишком много времени, чтобы обновить кроры записей.
- person user1017936; 11.06.2013
@ user1017936, если вы укажете значение ПО УМОЛЧАНИЮ при добавлении столбца, вам не нужно будет обновлять все строки.
- person Jeffrey Kemp; 11.06.2013
1 крор = 10000000. Да, я знаю, но это также заблокирует таблицу на этот период и для такого большого количества записей время простоя будет огромным. Поэтому я искал какую-то другую альтернативу.
- person user1017936; 11.06.2013
not null? - person Alex Poole   schedule 30.07.2013