Добавление столбцов со значением по умолчанию в оракуле с миллиардами записей

Мне нужно добавить 3 столбца со значением по умолчанию в таблицу с 1,70 миллиардами записей в Oracle 11g. Как лучше всего это сделать с минимальными затратами времени?


person user1017936    schedule 10.06.2013    source источник
comment
Вероятно, вы уже решили эту проблему, но были ли новые столбцы определены как not null?   -  person Alex Poole    schedule 30.07.2013
comment
да, разрешилось. Нет, это также позволит нулевые значения.   -  person user1017936    schedule 01.08.2013


Ответы (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
comment
По сути, мне нужно добавить новые столбцы со значением по умолчанию, чтобы существующая строка также обновлялась значениями по умолчанию в новом столбце. Здесь мы можем добавить нулевой столбец по умолчанию, а затем запустить скрипт, чтобы обновить значения столбца, а затем изменить значение столбца по умолчанию, но это занимает слишком много времени, так как он имеет 170 крор записей ИЛИ Мы можем напрямую добавить столбцы со значением по умолчанию, но это будет также занимает слишком много времени, чтобы обновить кроры записей. - person user1017936; 11.06.2013
comment
@ user1017936, если вы укажете значение ПО УМОЛЧАНИЮ при добавлении столбца, вам не нужно будет обновлять все строки. - person Jeffrey Kemp; 11.06.2013
comment
1 крор = 10000000. Да, я знаю, но это также заблокирует таблицу на этот период и для такого большого количества записей время простоя будет огромным. Поэтому я искал какую-то другую альтернативу. - person user1017936; 11.06.2013