打破一个非常长的MySQL查询是否更好?

时间:2013-12-20 13:57:06

标签: mysql performance

我最终得到了一个类似于此的非常大的查询:

 DELETE FROM compilation WHERE id = 1574 OR id = 1573 OR id = 1571 OR id = 1572 OR id = 1570 OR id = 1569 OR id = 1568 OR id = 1567 OR id = 1566 OR id = 1565 OR id = 1564 OR id = 1563 OR id = 1562 OR id = 1560 OR id = 1561 OR id = 1558 OR id = 1559 OR id = 1557 OR id = 1556 OR id = 1555 OR id = 1554

但我最近发现我有超过2746个“OR”声明。这是一种不好的做法吗?我应该进行foreach循环并删除每个连接一条记录吗?

MySQL中的每个查询是否也有字符限制?

提前致谢。

3 个答案:

答案 0 :(得分:11)

使用IN()

DELETE FROM compilation 
WHERE id IN (1574,1573,1571)

或者如果您要删除一系列数字,请使用BETWEEN

DELETE FROM compilation 
WHERE id BETWEEN 1571 AND 1574

答案 1 :(得分:2)

如果您有2746个“OR”语句,您可能需要考虑将ID放入临时表,然后在查询中使用该表。

答案 2 :(得分:0)

最好在MySQL中执行delete作为一个语句而不是多次往返应用程序,因为应用程序和服务器之间的握手比删除多行的单个语句花费的时间要多得多。

但是,看一下你的陈述,很明显你可以把它概括为:

 DELETE FROM compilation WHERE id BETWEEN 1554 AND 1574;

如果你能找到让应用程序将其识别为范围而不是一组不同值的方法,那么你将会有更轻松的时间。