【问题标题】:How large can the array passed to SQL where column_value IN (Array) be?传递给 SQL 的数组可以有多大,其中 column_value IN (Array) 是多少?
【发布时间】:2011-04-23 13:26:55
【问题描述】:

我正在编写一些代码,这些代码将使用

在包含超过 60,000 行的表中查找唯一 ID
mysql_query("SELECT * FROM users WHERE  unique_indexed_user_id IN('".join("', '", $array)."')") ;

此数组的数量不限于最终用户,因此他们最终可能会选择一个大数组。因此我必须限制数组

   if( count($array_limit)>$array_limit ) 
  array_splice($array, $array_limit);

但我不知道如何计算限制,此代码正在社交网络中用于人们邀请他们的朋友参加某事。所以越大越好。但是我不知道mysql可以处理多大的数组?

$array_limit 的值应该是多少?

【问题讨论】:

  • 我认为限制是由查询的字节大小决定的,而不是数组中元素的数量。查询大小的限制由 max_packet_size 决定。

标签: sql mysql database relational-database


【解决方案1】:

传递给 MySQL 的查询的最大长度是 max_packet_size 变量的长度。 https://dev.mysql.com/doc/refman/8.0/en/packet-too-large.html

您可能还需要考虑其他因素,例如解析和执行具有这么多 ID 的查询所需的时间长度。我自己也采用了这种方法,在几千个 ID 之后它开始严重变慢。如果可以的话,你可能想试试JOIN

【讨论】:

    【解决方案2】:

    你需要多少,真的?

    我在一个查询中使用了类似 10000 个项目,没有问题(将数据从一个数据库移动到另一个数据库,而不是在实时站点中),所以您当然可以进行非常大的查询。

    然而,当您想向用户显示这些项目时,获取这么多项目是没有意义的,因为没有人会滚动一个如此大的列表到最后,拥有这么多数据很可能会大大降低用户界面的速度。

    您应该根据请求使用某种分页或追加,这样您每次只能获得大约一百个项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2015-11-29
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多