正如我們所知,所有人都說EXISTS
比IN
條款更好。我有問題,每次都沒有回答。sql server中存在的執行情況
當我們使用Exists
時,在獲取第一條記錄時是完全執行內部查詢還是繼續執行所有記錄?
正如我們所知,所有人都說EXISTS
比IN
條款更好。我有問題,每次都沒有回答。sql server中存在的執行情況
當我們使用Exists
時,在獲取第一條記錄時是完全執行內部查詢還是繼續執行所有記錄?
[NOT] EXISTS運算符在子查詢(即驅動查詢包含大量數據)時提供最佳性能。原因是它遵循查詢中'至少找到'的原則。如果在與主駕駛查詢相關的子查詢中找到至少一條記錄,並且停止進一步掃描該表,則將其設置爲TRUE。與[NOT] IN,LIKE等其他比較運算符不同,它會返回用於比較的數據,[NOT] EXISTS返回BOOLEAN輸出。
您可以在鏈接找到更詳細的說明:
http://www.dbanotes.com/database-development/using-exists-in-oracle-sql-queries/
我會說,你的說辭是可怕的開始。你在文章中首先說的是一個謬論 - 吸引人氣。這真的是專業人員處理自己的方式嗎?
至於你的實際問題,exists
和in
都是一樣的。任何理智的查詢計劃優化器都會爲它們生成相同的計劃。
-- http://sqlfiddle.com/#!6/97c87/1
select *
from t1
where name in (select name from t2)
此查詢將產生計劃:
-- http://sqlfiddle.com/#!6/97c87/2
select *
from t1
where exists (select name from t2 where t2.name=t1.name)
而這第二個查詢會產生計劃:
正如你所看到的,是相同的。
一個簡單的谷歌搜索會給你答案:) @Dinesh –