Вы не можете получить хороший ответ на этот вопрос без дополнительной работы.
После выполнения самого оператора SQL наиболее важным является то, что статистика объектов (в данном случае таблиц и индексов) является репрезентативной.
Тогда вам действительно нужно взглянуть на путь доступа, который выбирает оракул - много способов сделать это.
Попробуйте
EXPLAIN PLAN SET STATEMENT_IS = 'SQL01' FOR
DELETE FROM item i
WHERE NOT EXISTS (SELECT 1 FROM item_queue q WHERE q.n=i.n)
AND NOT EXISTS (SELECT 1 FROM tool_queue t WHERE t.n=i.n);
Тогда
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
Возможно, опубликуйте результат здесь.
Если вы попробуете разные вещи, такие как переписывание запроса, изменение индексов и т. Д., Вы заметите, что путь доступа меняется.
Это довольно сложная область - и вам нужно будет учиться / практиковаться.
Удаление происходит медленно по ряду причин, но важным фактором является поддержание индексов в таблице. Однако, в вашем случае, вы говорите, что есть только 10 тыс. Строк, что довольно мало. (Кстати, вы не указали здесь время. Это занимает 1, 10 или 100 секунд в данный момент? И чего вы хотите достичь?) Поэтому я бы сосредоточился на пути доступа через большие таблицы.
Мой первый подход может быть:
DELETE FROM item i
WHERE NOT EXISTS
(SELECT NULL
FROM item_queue q,
tool_queue g
where q.key = g.key -- if the tables are related
AND q.n=i.n) ;
Но, как я уже сказал, здесь много факторов.