2015-07-13 104 views
-3

正如我們所知,所有人都說EXISTSIN條款更好。我有問題,每次都沒有回答。sql server中存在的執行情況

當我們使用Exists時,在獲取第一條記錄時是完全執行內部查詢還是繼續執行所有記錄?

+1

一個簡單的谷歌搜索會給你答案:) @Dinesh –

回答

-1

[NOT] EXISTS運算符在子查詢(即驅動查詢包含大量數據)時提供最佳性能。原因是它遵循查詢中'至少找到'的原則。如果在與主駕駛查詢相關的子查詢中找到至少一條記錄,並且停止進一步掃描該表,則將其設置爲TRUE。與[NOT] IN,LIKE等其他比較運算符不同,它會返回用於比較的數據,[NOT] EXISTS返回BOOLEAN輸出。

您可以在鏈接找到更詳細的說明:

http://www.dbanotes.com/database-development/using-exists-in-oracle-sql-queries/

+0

我不知道你從哪裏得到你的信息,但我建議一個新的來源。 「in」,「like」和你所謂的「others」也是布爾運算符,一旦找到數據就會停下來。 – Blindy

+0

那麼我提到上面的鏈接和下面的鏈接,如果多數民衆贊成什麼時候要求什麼時候引用「源」:http://stackoverflow.com/questions/12896007/oracle-in-vs-exists-difference @Bindy –

+0

這裏沒有人提到甲骨文,但你,如果這是真的。 – Blindy

1

我會說,你的說辭是可怕的開始。你在文章中首先說的是一個謬論 - 吸引人氣。這真的是專業人員處理自己的方式嗎?

至於你的實際問題,existsin都是一樣的。任何理智的查詢計劃優化器都會爲它們生成相同的計劃。

-- http://sqlfiddle.com/#!6/97c87/1 
select * 
from t1 
where name in (select name from t2) 

此查詢將產生計劃:

plan 1

-- http://sqlfiddle.com/#!6/97c87/2 
select * 
from t1 
where exists (select name from t2 where t2.name=t1.name) 

而這第二個查詢會產生計劃:

enter image description here

正如你所看到的,是相同的。

+0

如果您將運行此查詢與更多的記錄,那麼你會得到不同。 – Dinesh

+0

你錯了,計劃不說謊。 – Blindy

相關問題