2011-12-27 86 views
14

我有一個使用數組的值,它的WHERE子句中的SQL查詢:SQL查詢中「in」子句中有多少個值太多?

$ids = array 
     ( 
      [0] => 1 
      [1] => 2 
      [2] => 5 
     ) 

$ids = join(',',$ids); 
$sql = "SELECT * FROM cats WHERE id IN ($ids)"; 


我的問題是有多少IDS太多?
它會影響速度嗎?

感謝所有

+0

這一切都取決於你的表結構和索引。顯然,謝爾蓋表示越慢越好。 – Aknosis 2011-12-27 23:33:42

+0

可能重複[MySQL中的條款內的項目數]](http://stackoverflow.com/questions/1532366/mysql-number-of-items-within-in-clause) – 2011-12-27 23:36:09

回答

0

你把IN的多個值,慢它將運行,效果顯着。

「多少太多」是許多因素的函數。例如,你的數據集的大小。或者查詢的其餘部分如何。

4

您選擇的數據越多,需要的時間越長,但您的主要關注點不應該是您選擇的ID數量。相反,你應該確保你的ID有一個INDEX或它是PRIMARY KEY。無論您抓取多少個ID,這將使查找速度更快。

+1

通常是的。但是,如果將'IN'與'ORDER'和'LIMIT'組合在一起,就會在大型數據集上出現問題。 – 2011-12-27 23:35:21

0

想到..如果您必須編寫5頁或10頁需要更長的時間......如果您有大量ID可以延長查詢時間,這很正常。您應該查看並確保您的數據不會重複因爲這會使查詢花費更長的時間來處理不必要的數據。

5

Oracle有1000個限制,這是我之前打的。 MySQL似乎並不介意。儘管如此,最好的解決方案不是爲那個大的數據集使用IN子句。 ID從哪裏來?如果來自同一個數據庫,那麼請查看是否可以使用子查詢,而不是基於一個參數進行搜索,例如用戶ID來查找鏈接的ID。這將會更加有效,因爲MySQL可以使用索引在內部進行連接。