2011-12-08 160 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表达式。在该栏目中有一个很好的索引,引擎可以简单地从一列中选择一个。

相关问题