2011-12-08 120 views
1

我的存儲過程今天不像昨天那樣完成。它仍然在底部顯示「正在執行查詢......」。我今天做的唯一不同的是增加了幾個逗號分隔值,可能是其中的兩倍。查詢現在完成需要更長時間嗎?在MySql中使用IN運算符是否會降低性能?

DELETE FROM PRODUCTS 
    WHERE STATUS IS NULL 
    OR STATUS IN ('09','12','13','A1','C1','G1','G2','G3','H1','I1','J1','N1','S1','T1','T2','T3','T4') 

查詢/過程是否不必爲每個值再次遍歷所有記錄?

因爲我只想要3個值,所以C3,R1和K1倒過來會更好。

DELETE FROM PRODUCTS 
    WHERE STATUS IS NULL 
    OR STATUS NOT IN ('C3','K1','R1') 

回答

2

IN()添加更多選擇會對執行時間產生一些影響。取決於該列是否被編入索引,會產生多大的影響。如果您需要改進此簡單查詢,請考慮在STATUS上創建索引。

0

除了Michaels評論(以及供將來參考),請查閱EXPLAIN關鍵字。 JoJo--它會幫助你弄清幕後發生的事情。

NOT IN是非常慢於IN - 因爲IN是在影響一大堆或OR表達式。在該欄目中有一個很好的索引,引擎可以簡單地從一列中選擇一個。

相關問題