Removing the "update nothing" will significantly improve performance. Updating a column to the same value is just as expensive as updating to a different value. The simple test case below shows a significant improvement after removing the unnecessary update.
drop table processors;
create table PROCESSORS
(
PROCESSOR_ID NUMBER primary key,
MESSAGE_ID NUMBER
);
insert into processors
select level, null
from dual connect by level <= 100;
commit;
begin
for i in 1 .. 100000 loop
update processors set message_id = null where processor_id = 1;
commit;
end loop;
end;
/
begin
for i in 1 .. 100000 loop
--update processors set message_id = null where processor_id = 1;
commit;
end loop;
end;
/
On my desktop removing the update
improved run time from 8.5 seconds to 1.3 seconds.
You may also want to watch out for some weird performance issues when updating the last column to null. After removing the meaningless updates it might be worth switching the column order so that the updated column is first, to avoid heap block compress waits. But I wouldn't optimize for that problem until you know it's happening.