У меня есть SQL-оператор, в котором используется Check-Function
, выполнение которого занимает довольно много времени.
Теперь я хочу распараллелить выполнение Check-Function
, но это не работает.
Где ошибка, которую я сделал?
Пример ниже выполняется за 5 секунд, но, насколько я понимаю, это должно занять около 1 секунды из-за параллелизма.
Фрагмент кода для тестирования:
CREATE TABLE PERSON AS
SELECT LEVEL AS ID, 'Person_'||LEVEL AS NAME
FROM DUAL
CONNECT BY LEVEL <= 5;
CREATE OR REPLACE FUNCTION LONGCHECKFUNC(ID NUMBER)
RETURN NUMBER IS
BEGIN
--Doing some very heavy Checks....
DBMS_LOCK.SLEEP(1 /*second*/);
RETURN 1;
END;
SELECT /*+PARALLEL(person, 5) */ *
FROM PERSON
WHERE LONGCHECKFUNC(ID)=1;