我的存储过程今天没有像昨天那样完成。它仍然在底部说“查询正在执行......”。我今天唯一不同的做法是添加一些逗号分隔值,可能是两倍。查询现在需要更长的时间才能完成吗?
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')
答案 0 :(得分:2)
向IN()
添加更多选项会对执行时间产生一些影响。影响的程度取决于该列是否已编入索引。如果您需要改进此简单查询,请考虑在STATUS
上创建索引。
答案 1 :(得分:0)
继Michaels评论(以及将来参考)后,查找EXPLAIN
关键字。 JoJo - 它将帮助您弄清楚幕后发生的事情。
NOT IN
比IN
慢得多 - 因为IN
会影响一大堆或OR
个表达式。如果该列具有良好的索引,则引擎可以一次一个地选择它们。