Мне нужен ваш совет для моего нижнего регистра.Oracle: после вставки в выбрать, обновить таблицу
получить данные из maintable и вставить в DataTable, где ROWNUM < = некоторое значение
когда все данные уже вставить в DataTable, я хочу эти данные в maintable обновит STAUS.
Проблема в том, что rownum более 500 тыс., Это занимает около 10 минут. На этот раз может возникнуть еще один запрос - получить одни и те же данные. Как я хочу это предотвратить?
Ниже мой sql.
insert into dataTable(id,num,status) select m.id,m.num,m.status from mainTable m where m.status = 'FREE' and rownum <= 100000;
update mainTable m set m.status = 'RESERVED' where m.num in (select d.num from dataTable where d.status = 'FREE');
я сделать некоторые исследования, но я не знаю, нужен ли я использовать оператор select for update
или merge
?
Это два отдельных запроса, не связанных между собой, потому что вы не вставляете столбец STATUS в 'dataTable'. Вы уверены, что это то, что вы хотите делать? Если он «медленный», вероятно, из-за отсутствия индексов/избирательности в столбце STATUS в 'dataTable' или NUM в' mainTable'. Можете ли вы указать количество записей, избирательность в каждом и план объяснения для этих запросов? – Ben
«вы не вставляете СТАТУС» - некоторая ошибка, я просто редактирую свой sql. Я также включаю статус. «Если это« медленно », это, вероятно, связано с отсутствием индексов/избирательности в столбце« - для dataTable нет индекса. Но для mainTable id, num и status имеют индекс. Я считаю, что если таблица имеет индекс, это замедлит вставку. – Sh4m
mainTable содержит 50 миллионов записей. – Sh4m