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

问题描述:

我有一个使用数组的值,它的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

你把IN的多个值,慢它将运行,效果显着。

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

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

+1

通常是的。但是,如果将'IN'与'ORDER'和'LIMIT'组合在一起,就会在大型数据集上出现问题。 – 2011-12-27 23:35:21

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

Oracle有1000个限制,这是我之前打的。 MySQL似乎并不介意。尽管如此,最好的解决方案不是为那个大的数据集使用IN子句。 ID从哪里来?如果来自同一个数据库,那么请查看是否可以使用子查询,而不是基于一个参数进行搜索,例如用户ID来查找链接的ID。这将会更加有效,因为MySQL可以使用索引在内部进行连接。