Я должен сгенерировать несколько миллионов обновлений из какой-то таблицы, чтобы обновить себя. Я только недавно узнал о parallel(tablename,threads)
, который действительно улучшил производительность в PLSQL-разработчике, когда я запустил что-то вроде этого:
select /* + parallel(table1,100) parallel(table2,100) */
'update table1 set id = 1 where ... and id = '||table1.id||' ...
where ...
(Я делаю это так, потому что в обновлении мне выдаются резервные данные. И мой БОСС сказал мне сделать это так; -))
Так что это действительно работает быстро при использовании статического числа в части set id = 1
и в PLSQL Developer.
Но затем я записал его в файл, вставил create sequence
и попытался использовать следующую последовательность:
create sequence myseq
start with 4200000
increment by 1
maxvalue 11200000;
select /* + parallel(table1,100) parallel(table2,100) */
'update table1 set id = '||myseq.nextval||' where ... and id = '||table1.id||' ...
where ...
Но теперь это ужасно медленно. И я не знаю почему. Я просто переписал генератор update
, чтобы вставить туда статические данные, и использовал awk
, чтобы заменить это последовательностью чисел, но кто-нибудь может объяснить, что вызвало это (и могу ли я что-то с этим сделать)? *
Заранее спасибо!