【问题标题】:How many values in an "in" clause is too many in a SQL query?在 SQL 查询中,“in”子句中有多少个值太多了?
【发布时间】:2012-01-28 20:04:20
【问题描述】:

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

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

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


我的问题是多少个 id 太多了?
会影响速度吗?

谢谢大家

【问题讨论】:

标签: mysql


【解决方案1】:

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

【讨论】:

  • 如果 id 不是来自同一个数据库怎么办?示例:从不同的数据库接收到一组 id,可能来自 NoSQL 数据库或其他 API?
【解决方案2】:

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

【讨论】:

  • 通常是的。但是,如果将INORDERLIMIT 结合使用,则会在大型数据集上遇到问题。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2016-02-27
      相关资源
      最近更新 更多