如果不做額外的工作,你無法真正得到一個好的答案。
在SQL語句iteself之後,最重要的是對象(表格和索引在這種情況下)的統計數據是有代表性的。
然後,你真的需要看看oracle選擇的訪問路徑 - 許多方法來做到這一點。
嘗試
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);
也許在這裏發表的結果。
當你嘗試不同的事情 - 比如重新編寫查詢,修改索引,等等,你會發現,訪問路徑的變化。
這是一個相當複雜的區域 - 你需要學習/實踐。
刪除是有很多原因慢,但一大因素是對錶的索引的維護。然而,就你而言,你說只有10k行非常小。 (順便說一下,你在這裏沒有給出時間安排,目前是需要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) ;
但是就像我說這裏有很多因素。
請重新格式化您的代碼,以便它不是在滾動窗格。 – Timothy 2010-03-16 16:03:26