有谁知道我可以在 where in 子句中给出多少个值?我在 where in 子句中得到 25000 个值,而 mysql 无法执行。有什么想法吗?等待你的想法
问问题
2342 次
3 回答
3
虽然这很旧,但它仍然出现在搜索结果中,因此值得回答。
MySQL 中对于查询的长度没有硬编码的最大值。这包括查询的所有部分,例如 WHERE 子句。
但是,有一个名为 max_allowed_packet 的值决定了您可以在 MySQL 服务器进程上运行的最大查询。这与查询中的元素数量无关,而是与查询的总长度有关。所以
SELECT * FROM mytable WHERE mycol IN (1,2,3);
不太可能达到极限
SELECT * FROM mytable WHERE mycal IN ('This string','That string','Tother string');
max_allowed_packet 的值可在服务器之间进行配置。但几乎可以肯定的是,如果你发现自己达到了极限,因为你正在编写史诗长度的 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 回答