как писать оптимальные запросы update

sql оптимизация oracle

Есть две таблицы. Надо сделать update в одной таблице для тех записей, которые есть в другой.
update table1
set flag=1
where id in (select id from table2 where ....)

Но вообще использование in сильно влияет на производительность, т.к. запрос в скобках выполняется для каждой записи. Или план выполнения update не такой, как select?

ps варианты с exists не интересуют. интересует возможность вынести запрос как это делается в select во from.

Примечание:
2 Harm
Смотрю план выполнения запроса и вижу, что внутренний select стоит в nested loops по внешней таблице. внутренний select никак не связан с внешней таблицей, но тем не менее выполняется в цикле.
Так что... вы не правы.

Конечно если внутренний select поместить в курсор... но для меня это не подходит.
Ответы:
Если подзапрос не коррелированный, то он должен выполняется только один раз, так как выборка внутреннего запроса не зависит от внешнего.
Присоединяюсь с Harm


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.