Мне нужно удалить 10 000 записей из таблицы, содержащей 9 миллионов записей. Идентификаторы, которые должны быть удалены, будут получены из сложного запроса и сохранены в коллекции Java.Удаление записей из Oracle 11g с помощью JDBC
У меня есть 3 подхода к осуществлению этого
1) Создайте подготовленное заявление, и добавить 10000 заявлений в партии и выполнить его.
заявление будет выглядеть следующим образом
Delete from <table_name> where id=?;
2) Написать в «» запрос, а не использовать «=» в пакете.
При этом 10 000 идентификаторов могут быть созданы как значения, разделенные запятой, в Java-коде и добавлены в запрос. Или 10000 идентификаторов вставляются во временную таблицу и делают выбор из этой таблицы в подзапросе.
Delete from <table_name> where id in (<CSV>);
or
Delete from <table_name> where id in (select id from <temp_table>);
В таблице нет ограничений и указателей. И я не могу добавить его, потому что я работаю над существующей таблицей.
Первый вариант требует времени для завершения. Он работал в течение 15 часов и до сих пор не завершен.
Вы говорите, что таблица не имеет первичного ключа в столбце 'id'? – Andreas
Это может показаться странным, но да! нет первичного ключа на id :) –
Таблица с идентификатором «id», но без первичного ключа. Это просто ужасный дизайн базы данных. На таком столе не может быть никакого поиска, так что в чем смысл? – Andreas