分裂一个非常长的MySQL查询更好吗?

问题描述:

我最终具有类似于这是一个非常庞大的查询:分裂一个非常长的MySQL查询更好吗?

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“或”语句。这是一种不好的做法吗?我应该做一个foreach循环并删除每个连接的记录吗?

在MySQL中,每个查询还有字符限制吗?

在此先感谢。

+0

一般来说,到mysql服务器(apache?)的往返次数越少越好。 1是好的。如果有限制,我从来没有听说有人打过它。 – Strawberry

使用IN()

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

,或者如果你有你想要删除使用BETWEEN

DELETE FROM compilation 
WHERE id BETWEEN 1571 AND 1574 

如果你有2746“或”报表数字的序列,你可能要考虑将ID的临时表,然后在查询中使用该表。

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

然而,看着你的发言很明显,你可以概括它:

DELETE FROM compilation WHERE id BETWEEN 1554 AND 1574; 

如果你能找到一种方式来获得应用程序,以确定它为一个范围,而不是一组不同的值,你会有更容易的时间。

+0

我无法使用BETWEEN,因为我可能在两者之间有不需要删除的记录。也许我举了一个坏榜样,因为它没有反映出这种情况。 – Koffeehaus