Ответ 1
Производительность зависит от используемой версии Oracle. В любом случае создаются блокировки.
Если версия <= Oracle 11.1, то # 1 делает то же самое, что и # 2. В любом случае, он медленный. Начиная с Oracle 11.2, Oracle представила большую оптимизацию для первого оператора (одна команда делает все). Вам не нужно менять команду - Oracle просто ведет себя по-другому. Он сохраняет значение по умолчанию только в словаре данных вместо обновления каждой физической строки.
Но я также должен сказать, что я столкнулся с некоторыми ошибками в прошлом, связанными с этой функцией (в Oracle 11.2.0.1)
- отказ от традиционного импорта, если экспорт был выполнен с прямым = Y Оператор
- merge может вызывать ORA-600 [13013] (внутренняя ошибка оракула)
- проблема с производительностью в запросах с использованием таких таблиц
Я думаю, что эти проблемы исправлены в текущей версии 11.2.0.3, поэтому я могу рекомендовать использовать эту функцию.