обновление x set y = null занимает много времени

На работе у меня большая таблица (около 3 миллионов строк, например, 40-50 столбцов). Иногда мне нужно очистить некоторые столбцы и заполнить их новыми данными. Чего я не ожидал, так это того, что

UPDATE table1 SET y = null

занимает гораздо больше времени, чем заполнение столбца данными, которые генерируются, например, в запросе sql из других столбцов той же таблицы или запрашиваются из других таблиц в подзапросе.Не имеет значения, просматриваю ли я все строки таблицы сразу (как в запросе на обновление выше) или использую курсор для просмотра таблицы строка за строкой (используя pk). Неважно, использую ли я большую таблицу на работе или создаю небольшую тестовую таблицу и заполняю ее несколькими сотнями тысяч тестовых строк. Установка для столбца значения NULL всегда занимает больше времени (в ходе тестов я встречал множители от 2 до 10), чем обновление столбца некоторыми динамическими данными (которые различаются для каждой строки).

В чем причина этого? Что делает Oracle, когда для столбца устанавливается значение NULL? Или - в чем моя ошибка в рассуждениях?

Спасибо за помощь!

P.S .: Я использую oracle 11g2, и нашел эти результаты, используя как разработчик plsql, так и разработчик oracle sql.

15
задан Thomas Tschernich 10 November 2011 в 11:48
поделиться