Мне нужно удалить некоторые нежелательные строки из таблицы на основе результата запроса на выборку из другой таблицы
DELETE /*+ parallels(fe) */ FROM fact_x fe
WHERE fe.key NOT IN(
SELECT DISTINCT di.key
FROM dim_x di
JOIN fact_y fa
ON fa.code = di.code
WHERE fa.code_type = 'ABC'
);
Внутренний запрос на выборку возвращает 77 строк и выполняется за несколько миллисекунд. но внешний запрос на удаление выполняется вечно (более 8 часов). Я попытался подсчитать, сколько строк нужно удалить, преобразовав значение delete в select count (1) и его примерно 66,4 миллиона строк fact_x из общего числа 66,8 миллионов строк. Я не пытаюсь усечь, хотя. Мне нужно сохранить оставшиеся строки.
Есть ли другой способ добиться этого? Будет ли удаление этого с помощью курсора pl / sql работать лучше?