2013-12-20 52 views
2

我最終具有類似於這是一個非常龐大的查詢:分裂一個非常長的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

回答

11

使用IN()

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

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

DELETE FROM compilation 
WHERE id BETWEEN 1571 AND 1574 
2

如果你有2746「或」報表數字的序列,你可能要考慮將ID的臨時表,然後在查詢中使用該表。

0

您最好在MySQL中執行delete作爲一個語句,而不是多次往返應用程序,因爲應用程序和服務器之間的握手需要比刪除多行的單個語句花費更多的時間。

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

DELETE FROM compilation WHERE id BETWEEN 1554 AND 1574; 

如果你能找到一種方式來獲得應用程序,以確定它爲一個範圍,而不是一組不同的值,你會有更容易的時間。

+0

我無法使用BETWEEN,因爲我可能在兩者之間有不需要刪除的記錄。也許我舉了一個壞榜樣,因爲它沒有反映出這種情況。 – Koffeehaus