На работе у меня большой стол (около 3 миллионов строк, например 40-50 столбцов). Иногда мне нужно очистить некоторые столбцы и заполнить их новыми данными. Я не ожидал, что
UPDATE table1 SET y = null
занимает гораздо больше времени, чем заполнение столбца данными, которые генерируются, например, в sql-запросе из других столбцов одной таблицы или запрашиваются из других таблиц в подзапросе. Не имеет значения, прохожу ли я сразу через все строки таблицы (например, в запросе на обновление выше), или если я использую курсор для перехода по таблице по строкам (используя pk). Не имеет значения, использую ли я большую таблицу на работе или создаю небольшую тестовую таблицу и заполняю ее несколькими сотнями тысяч тестовых строк. Установка столбца в значение null всегда занимает больше времени (во всех тестах я встречал коэффициенты от 2 до 10), чем обновление столбца с некоторыми динамическими данными (что отличается для каждой строки).
В чем причина? Что делает Oracle при установке столбца в null? Или - какова моя ошибка в рассуждениях?
Спасибо за вашу помощь!
P.S.: Я использую oracle 11g2 и нашел эти результаты, используя разработчик plsql и разработчика oracle sql.