SQL查詢優化

iSQlServer發表於2010-09-02
我們來討論一下select ... from ... where ... exists ....這個了。Exists的查詢速度要比in強得多,這是眾所周知的事,但我們並不可以說完全用exists來代替in。為什麼這麼說呢?我們先來看看可以用exists來代替in的場合吧。

 

select... from A where id in (select id from B)可以替代為select...from A where exists (select id from B where A.id = id)

not in 的話可以替換成not exists。這是可以使用exists來提高查詢效能的場合,接著什麼是不能直接替換的場合呢?

 

select...from A where id in (1,2,3,4,5,6....)這種出現零散值的時候就不能直接使用exists來替換了。

如果出現這種情況的話,我的做法是用in和exists結合的辦法,就像我在in篇寫的使用臨時表作為輔佐,先用in把篩選過的資料導進臨時表裡,然後用臨時表跟其他表關聯或者使用where exists(select id from #tempTable where A.id = id)這種方法來篩選記錄。這樣做法往往比一大串的表連線加where in的效能好很多。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-672408/,如需轉載,請註明出處,否則將追究法律責任。

相關文章