2011-12-08 8 views
1

私のストアドプロシージャは、昨日のように今日は終了していません。下部に「クエリが実行されています...」と表示されます。今日私が違ったのは、カンマ区切りの値を2倍以上追加しただけです。クエリが終了するのに時間がかかりますか?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というキーワードを参照してください。ジョジョ - 舞台裏で何が起こっているのかを理解するのに役立ちます。

NOT ININよりuaually遅いです - INは全体の束やOR表現に影響を与えているよう。その列に良好なインデックスを付けることで、エンジンは一度に1つずつ取り除くことができます。

関連する問題