我有兩張桌子,一張是另一張的副本。 (我必須刪除父項中不存在的記錄)。運行此查詢可以工作,但需要大約1分鐘才能完成。我知道NOT EXISTS速度更快,因爲我不會爲每行運行子查詢,但不會返回任何結果。有什麼辦法可以加快這個查詢嗎?
SELECT mlscopy.listing_listnum
FROM mlscopy
WHERE mlscopy.listing_listnum
NOT IN (SELECT mls_cvrmls.listing_listnum FROM mls_cvrmls)
我會澄清,這裏的問題是父母隨着時間的變化,我必須從孩子中刪除/添加記錄。所以我堅持要從child中刪除listing_listnum在parent中不存在的地方。
這裏是不存在的查詢
SELECT mlscopy.listing_listnum
FROM mlscopy
WHERE
NOT EXISTS (SELECT mls_cvrmls.listing_listnum FROM mls_cvrmls)
想通了
SELECT mlscopy.listing_listnum
FROM mlscopy
WHERE NOT EXISTS (
SELECT mls_cvrmls.listing_listnum
FROM mls_cvrmls
WHERE mlscopy.listing_listnum = mls_cvrmls.listing_listnum
)
「我知道NOT EXISTS比較快,因爲我不會運行子查詢的每一行,但不返回任何結果。」 - 你可以包含你的'not exists'查詢嗎?如果有的話,它應該比'not in'查詢更可靠,因爲空值可能在被排除的數據集中。 – 2012-01-16 21:04:05
您的問題的關閉點。但是如何爲父表添加觸發器來自動維護子表。 – Randy 2012-01-16 21:22:42
嗯..湯姆凱特不會說EXISTS會更快。 http://asktom.oracle.com/pls/asktom/f?p=100:11:4144857323705644::::P11_QUESTION_ID:953229842074 – Benoit 2012-01-17 12:24:59