天天看點

sql中in 和 exists的用法和性能差別

版權聲明:歡迎評論和轉載,轉載請注明來源。 https://blog.csdn.net/zy332719794/article/details/7429167

在用法上,in和exists的作用都一樣,甚至in可以用exists來寫,exists也可以換成in來寫,但在資料量較大的時候效率不盡相同。

in 和 exists的差別:

如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in, 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。

區分in和exists主要是造成了驅動順序的改變(這是性能變化的關鍵),如果是exists,那麼以外層表為驅動表,先被通路,如果是IN,那麼先執行子查詢,是以我們會以驅動表的快速傳回為目标,那麼就會考慮到索引及結果集的關系了

,另外IN時不對NULL進行處理。

現在網上對EXIST和IN的效率誰比較高一直争論不休,其實這個問題我們本身也很難判斷,畢竟有時候效率這個問題不是我們輕易能看出來的。

碰到這個問題的時候,在符合上面理論的前提下再反複測試。