在MySql中使用IN运算符会降低性能吗?

时间:2011-12-08 18:40:36

标签: mysql

我的存储过程今天没有像昨天那样完成。它仍然在底部说“查询正在执行......”。我今天唯一不同的做法是添加一些逗号分隔值,可能是两倍。查询现在需要更长的时间才能完成吗?

  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 个答案:

答案 0 :(得分:2)

IN()添加更多选项会对执行时间产生一些影响。影响的程度取决于该列是否已编入索引。如果您需要改进此简单查询,请考虑在STATUS上创建索引。

答案 1 :(得分:0)

继Michaels评论(以及将来参考)后,查找EXPLAIN关键字。 JoJo - 它将帮助您弄清楚幕后发生的事情。

NOT ININ慢得多 - 因为IN会影响一大堆或OR个表达式。如果该列具有良好的索引,则引擎可以一次一个地选择它们。