以下是否有任何性能差異?SQL:像OR與IN
NAME LIKE '%EXPRESSION_1%'
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'
VS
NAME IN (ACTUAL_VALUE_1,ACTUAL_VALUE_2,.., ACTUAL_VALUE_N)
以下是否有任何性能差異?SQL:像OR與IN
NAME LIKE '%EXPRESSION_1%'
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'
VS
NAME IN (ACTUAL_VALUE_1,ACTUAL_VALUE_2,.., ACTUAL_VALUE_N)
IN
版本潛在的很多,很多固定河
這兩個版本做不是做同樣的事情。但是,如果滿足您的需求,IN
版本可以利用NAME
上的索引。 LIKE
版本不能,因爲模式以通配符開頭。
你可以這樣寫:
WHERE NAME LIKE 'EXPRESSION_%'
如果滿足您的需求,它也可以採取NAME
指數的優勢。
您可以簡單地嘗試使用
NAME LIKE '%EXPRESSION_%'
至於表現而言則IN比較快於OR。您也可以使用兩個查詢的執行計劃來確認性能。
同樣如上所述,您顯示的兩個查詢是不同的。
第一個查詢:
NAME LIKE '%EXPRESSION_1%'
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'
將嘗試獲取具有像
EXPRESSION_123
XXXEXPRESSION_1234
EXPRESSION_2323
EXPRESSION_2......
樣本數據的結果,而你的第二個查詢將匹配的精確匹配,以
ACTUAL_VALUE_1,ACTUAL_VALUE_2.....
記錄
我認爲有必要提到LIKE子句很容易使列上的索引無效,尤其是當它在兩側都是通配符時。因此,執行LIKE而不是嚴格比較的性能損失可能非常高,比較OR和IN在優化方面沒有意義,在這種情況下 –
如果您使用的變量表達式可以根據給定的參數進行更改。然後使用
declare @Expression1 varchar(50)
Set @Expression2 = '%'+ @Expression1 +'%'
NAME LIKE @Expression2
所以無論參數會在@Expression1它會自動照顧它。
http://stackoverflow.com/questions/782915/mysql-or-vs-in-performance – DonCallisto
這兩個條件不是一回事。你無法比較它們。要找出哪個更有效,只需檢查執行計劃。 –
LIKE命令慢於等於。 IN正在工作看起來像OR一樣。 – mkysoft