Rownum или Fetch/offset хороши для выбора и обработки миллионов записей
Я хотел бы прочитать миллион записей из оракула и перенести в другую таблицу через Java. По какой-то причине мы используем процесс Java, мы собираемся это.
Я хотел бы попросить лучшего подхода для выбора записей из таблиц для примеров 1000 записей одновременно. Хорошо ли rownum или Fetch/Offset в 12c?
например, если таблица имеет 10000 записей после запроса, который я могу использовать.
select *
from table
first 500 rows only -- first time
select *
from table
offset 500 next 500 rows only
... во второй раз (В этот раз оракул снова извлекает 1000 записей и отправляет 500 строк в Resultset..)
select *
from table
offset 1000 next 500 rows only
.... В этот раз оракул снова извлекает 1500 записей и отправляет 500 строк в результат...
... скоро
так что я не уверен, что лучше всего выбрать Rownum для выбора 500 записей за раз или подход смещения / выборки... нужно посоветовать..
1 ответ
Вы хотите вытащить миллионы строк из таблицы в базе данных № 1, вытянуть их с помощью соединения с относительно низкой пропускной способностью к Java-приложению, чтобы вы могли массировать их, затем вы хотите развернуться и подтолкнуть те же строки вверх в ту же самую соединение, чтобы вставить их в базу данных № 2 - вы видите, почему это не может быть хорошим выбором?:-)
Лучше - создайте временную таблицу в базе данных № 1, затем, как только ваша временная таблица заполнится, отправьте данные из базы данных № 1 в базу данных № 2, используя соединение с базой данных Oracle-Oracle.
Что-то вроде:
Database #1
CREATE TABLE TEMP_TABLE AS
SELECT FIELD1,
FIELD2,
SUM(FIELD3) -- or whatever
FROM TABLE1
WHERE WHATEVER = SOMETHING_ELSE
GROUP BY FIELD1,
FIELD2
Run whatever PL/SQL procedures, etc, are needed to massage your data and make it
pretty.
Database #2
CREATE TABLE PRETTY_BRAND_NEW_TABLE AS
SELECT *
FROM TEMP_TABLE@db1;
По моему опыту это ваш лучший вариант. YMMV.
Удачи.