У нас есть процесс, который слишком долго работал, поэтому я просмотрел некоторую оптимизацию и обнаружил, что он написан довольно плохо или, по крайней мере, я думал.INSERT от SELECT против курсора в Oracle
Вообще это то, что он сделал ... первый, получить необходимые поля для идентификации каждой записи:
Select key1, key2, key2 from a [email protected]_host_dblink;
Затем программа петельные через все результаты, запрашивать один и тот же удаленный вид для каждой записи один за другим времени, а затем вставили каждую запись на локальный хост. Это, казалось, довольно глупо для меня, поэтому я на переписывание процесс, чтобы получить все данные в первом запросе, а не только ключи, например, так:
insert into localtable(col1, col2, col3 ... col15)
select col1, col2, col3 ... col15 FROM [email protected];
Этот процесс не пошел хорошо - он висел в течение 30 минут, поэтому администратор базы данных убил его. Я не знаю, как это мнение написано на удаленном хосте, все, что я знаю, это то, что он, похоже, довольно подвержен налогообложению в этой системе.
Итак, вопрос в том, имеет ли вставка в выборку некоторые неотъемлемые недостатки, когда запрашивается через dblink? Будет ли это работать лучше, если бы я сначала запросил все столбцы в курсор, а затем выполнил вставки по одному на нашем конце?