2010-08-04 164 views
1

我嘗試創建標準化的SQL腳本以用於我的SSRS報告。如果我想有諸如聲明:IN vs = where Where子句

Select * from mytable 

和where子句中使用SQL變量(SSRS參數),沒有任何速度上的優勢,使用這樣的:

其中場= @MyField

VS.

哪裏場(@MyField)

我知道第二個選項同時支持多種選擇和單個選擇,而第一隻支持單。

如果我用IN語句編寫我的所有查詢以獲得一致性,是否有任何性能命中?

回答

3

沒有性能問題。優化程序將IN轉換爲一系列OR操作。

作爲一個方面說明,我希望你在實際查詢中沒有真正使用SELECT *。

+0

當然沒有。我只是節省了時間,而不是鍵入Field1,Field2等。 – DavidStein 2010-08-04 19:48:17

+1

'select *'有什麼問題? – 2010-08-04 22:07:58

0

對於一個參數,優化器將在實際執行語句中將該IN更改爲=。

由於這兩個參數是Sargeble(喬斯特凡尼感謝關注);在性能上的差異可能是由於你在in子句中有序列值,例如IN (1,2,3,4,5,6)between 1 and 6慢,因爲對於IN,索引必須在這種情況下爲每個值讀取6次,僅在一次之間。

+1

這是不正確的。 IN是sargable,不IN不是sargable。 – 2010-08-04 16:34:27

+0

經過一番谷歌搜索之後,我必須承認,你有權利,在一些開發人員博客上寫道,這也是不可禁止的。謝謝。 – 2010-08-04 16:40:41

+0

我注意到你提供了一個類似的答案,以前的問題。您可能也想修改該答案。 http://stackoverflow.com/questions/3353084/sql-efficiency-vs-in-vs-like-vs-matches/3353223#3353223 – 2010-08-04 18:16:47

0

如果您的IN子句中有大量的項目,性能確實會變慢