我嘗試創建標準化的SQL腳本以用於我的SSRS報告。如果我想有諸如聲明:IN vs = where Where子句
Select * from mytable
和where子句中使用SQL變量(SSRS參數),沒有任何速度上的優勢,使用這樣的:
其中場= @MyField
VS.
哪裏場(@MyField)
我知道第二個選項同時支持多種選擇和單個選擇,而第一隻支持單。
如果我用IN語句編寫我的所有查詢以獲得一致性,是否有任何性能命中?
我嘗試創建標準化的SQL腳本以用於我的SSRS報告。如果我想有諸如聲明:IN vs = where Where子句
Select * from mytable
和where子句中使用SQL變量(SSRS參數),沒有任何速度上的優勢,使用這樣的:
其中場= @MyField
VS.
哪裏場(@MyField)
我知道第二個選項同時支持多種選擇和單個選擇,而第一隻支持單。
如果我用IN語句編寫我的所有查詢以獲得一致性,是否有任何性能命中?
沒有性能問題。優化程序將IN轉換爲一系列OR操作。
作爲一個方面說明,我希望你在實際查詢中沒有真正使用SELECT *。
對於一個參數,優化器將在實際執行語句中將該IN更改爲=。
由於這兩個參數是Sargeble(喬斯特凡尼感謝關注);在性能上的差異可能是由於你在in子句中有序列值,例如IN (1,2,3,4,5,6)
比between 1 and 6
慢,因爲對於IN,索引必須在這種情況下爲每個值讀取6次,僅在一次之間。
這是不正確的。 IN是sargable,不IN不是sargable。 – 2010-08-04 16:34:27
經過一番谷歌搜索之後,我必須承認,你有權利,在一些開發人員博客上寫道,這也是不可禁止的。謝謝。 – 2010-08-04 16:40:41
我注意到你提供了一個類似的答案,以前的問題。您可能也想修改該答案。 http://stackoverflow.com/questions/3353084/sql-efficiency-vs-in-vs-like-vs-matches/3353223#3353223 – 2010-08-04 18:16:47
如果您的IN子句中有大量的項目,性能確實會變慢
當然沒有。我只是節省了時間,而不是鍵入Field1,Field2等。 – DavidStein 2010-08-04 19:48:17
'select *'有什麼問題? – 2010-08-04 22:07:58