Я разработчик Pl Sql и выполняю процесс ETL, преобразую полученные данные и вставляю их в другую таблицу. Итак, я изучаю, можно ли изменить мою «вставку для всех» на «вставить выберите конвейерную».
Это изменение производительности, если да, то почему? Я обрабатываю таблицы кратных чисел, превышающие 200 млн строк.
OPEN cursorData;
LOOP
Fetch cursorData BULCK COLLECT INTO rawTable LIMIT blockLimit;
ProcessRawData(tbData, tbReferences);
FORALL i IN 1..tbReferences.COUNT LOOP
INSERT INTO goal_schema.references VALUES tbReferences(i);
END LOOP;
FORALL i IN 1..tbReferences.COUNT LOOP
INSERT INTO goal_schema.table VALUES tbReferences(i);
END LOOP;
EXIT WHEN cursorData%NOTFOUND;
END LOOP;
Я sh изменю его для этого кода, если можно выполнить процесс.
OPEN cursorData;
LOOP
Fetch cursorData BULCK COLLECT INTO rawTable LIMIT blockLimit;
ProcessRawData(tbData, tbReferences);
INSERT /*+ Pallarel */ INTO goal_schema.references SELECT * FROM Table(pipeFuncGetReferences());
INSERT /*+ Pallarel */ INTO goal_schema.table SELECT * FROM Table(pipeFuncGetData());
EXIT WHEN cursorData%NOTFOUND;
END LOOP;
Я проводил различные тесты времени , но база данных используется в других процессах и не может выполнять массивный тест, пока выполняются другие важные процессы. Тогда мое время сильно изменится при запуске.
Примечание: мы используем шаблоны для процесса, тогда это повлияет на все пакеты.