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

eMR*_*MRe 17 mysql

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

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

 $ids = join(',',$ids);   
 $sql = "SELECT * FROM cats WHERE id IN ($ids)"; 
Run Code Online (Sandbox Code Playgroud)


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

谢谢大家

Mat*_*son 6

Oracle的限制为1000,这是我之前遇到的.MySQL似乎并不介意.最好的解决方案是不要为那个大的数据集使用IN子句.ID来自何处?如果来自同一个DB,那么看看你是否可以使用子查询来搜索基于一个参数,例如userid来查找链接的id.这将更有效,因为MySQL可以使用索引在内部进行连接.


Int*_*ang 5

您选择的数据越多,所需的时间就越长,但您主要关心的不应该是您选择的 id 数量。相反,您应该确保您的 id 上有一个INDEX或它是PRIMARY KEY. 无论您抓取多少个 ID,这都会使查找速度更快。


Ser*_*sev -1

显然,您输入的值越多IN,运行速度就越慢。

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