什么定义了MySQL WHERE子句中项目数的上限?

时间:2017-01-07 19:15:07

标签: mysql

我正在查看由其他人编写的代码,这些代码接受一个数组并为MySQL制定一个SELECT查询,该查询通常在WHERE IN子句中有很多术语。它编写的语言恰好是PHP,但我认为这可能与我的问题无关。

假设某些$ record_ids数组中有数百个且可能有数千个整数,那么数组就会被创建:

$sql = "SELECT * FROM my_table WHERE id IN (" . implode(",", $record_ids) . ")";

这将导致查询可能如下所示

SELECT * FROM my_table WHERE id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,7,18,19, 20, 21, 22);

除了IN子句中可能有数千个ID。我的问题是 MySQL是否对WHERE IN子句中可以放入的术语数量施加了一些上限?如果没有,肯定必须有一些约束或限制此查询的大小 - 这个限制是什么?

2 个答案:

答案 0 :(得分:1)

那将是the size of the query packet,通常是兆字节的数量级。

使用个值,或许要加入的临时表可能是有利的。不过,我从未测试过这个。

更新:已经给出答案,还有the performance question has been answered只要项目数量超过几十个,就将项目放在临时表格中会更好。

此外,第二个解决方案可能更容易移植到其他更严格限制的RDBMS(或MySQL配置!)。想象一下,需要一个8M的数据包大小,托管只会提供4个。

答案 1 :(得分:0)

在我们编写查询时的SQL查询中 select * from table where id in(DATA); 这个时间点不仅是自定义用户定义的DATA,而且它也可以是数据库中的单独子查询,查询可以为您提供任意数量的结果。因为我们在select语句中没有任何上限,它可以获取数据库中可用的全部记录数。所以最后的结论是没有这样的上限应用于您的查询,因为DATA可以是一个选择查询。我希望这个解释对你有所帮助。

相关问题