2

有谁知道我可以在 where in 子句中给出多少个值?我在 where in 子句中得到 25000 个值,而 mysql 无法执行。有什么想法吗?等待你的想法

4

3 回答 3

3

虽然这很旧,但它仍然出现在搜索结果中,因此值得回答。

MySQL 中对于查询的长度没有硬编码的最大值。这包括查询的所有部分,例如 WHERE 子句。

但是,有一个名为 max_allowed_pa​​cket 的值决定了您可以在 MySQL 服务器进程上运行的最大查询。这与查询中的元素数量无关,而是与查询的总长度有关。所以

SELECT * FROM mytable WHERE mycol IN (1,2,3);

不太可能达到极限

SELECT * FROM mytable WHERE mycal IN ('This string','That string','Tother string');

max_allowed_pa​​cket 的值可在服务器之间进行配置。但几乎可以肯定的是,如果你发现自己达到了极限,因为你正在编写史诗长度的 SQL 语句(而不是处理二进制数据,这是达到它的正当理由),那么你需要重新考虑你的 SQL。

于 2012-04-18T16:16:24.977 回答
2

我认为如果这个限制是一个问题,那么你做错了什么。

也许您可以将 where 子句中的数据存储在一个表中,然后加入它。这可能会更有效率。

于 2010-03-11T07:08:22.663 回答
0

我认为这与执行时间有关。

我认为您正在做这样的事情:如果我错了,请纠正我:

Select FROM table WHERE V1='A1' AND V2='A1' AND V3='A3' AND ... Vn='An'

总有一种有效的方法可以在数据库中执行 SELECT。在数据库中工作很重要,要记住秒非常重要。

如果您可以分享您的查询的样子,那么我们可以帮助您制定高效的 SELECT 语句。

我希望你成功

于 2015-01-07T08:58:59.633 回答