“in”子句中有多少值在SQL查询中太多了?

时间:2011-12-27 23:30:03

标签: mysql

我有一个SQL查询,它在WHERE子句中使用数组的值:

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

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


我的问题是有多少ID太多了?
它会影响速度吗?

全部谢谢

4 个答案:

答案 0 :(得分:5)

Oracle的限制为1000,这是我之前遇到的。 MySQL似乎并不介意。最好的解决方案是不要为那个大的数据集使用IN子句。 ID来自何处?如果来自同一个数据库,那么看看您是否可以使用子查询代替基于一个参数进行搜索,例如userid查找链接的ID。由于MySQL可以使用索引在内部进行连接,因此效率会高得多。

答案 1 :(得分:4)

您选择的数据越多,所需的时间就越长,但主要关注的不应该是您选择的ID数量。相反,您应该确保您的ID上有INDEX或者PRIMARY KEY。无论您抓到多少ID,这都会使查找变得快速。

答案 2 :(得分:0)

您放入IN的值越多,显然会越慢。

“多少太多”是许多因素的函数。例如,您的数据集大小。或者你的查询的其余部分是什么样的。

答案 3 :(得分:0)

想想..如果你需要写5页或10页需要更长的时间...如果你有大量的ID可以延长查询时间是正常的。你应该查看并确保你的数据没有重复,因为这将使查询花费更长时间来处理不必要的数据..