MySQL IN 条件限制

Posted

技术标签:

【中文标题】MySQL IN 条件限制【英文标题】:MySQL IN condition limit 【发布时间】:2011-05-15 14:36:12 【问题描述】:

嘿,我必须在我的 mysql 语句中使用带有大量 id 的 IN 条件。

例子

SELECT * FROM users WHERE id IN (1,2,3,4...100000)

IN 语句可以有的项目是否有限制?

【问题讨论】:

MySQL number of items within "in clause"的可能重复 【参考方案1】:

没有,请查看manual about the IN function:

IN 列表中值的数量仅受max_allowed_packet 值的限制。

【讨论】:

所以,例如,如果我有一个带有where id IN (14000 ids) 的更新,它将一直工作到更新查询小于 64MB(这是默认值),对吧? @OlegAbrazhaev IN 关键字没有任何内置限制,但是可能存在其他限制,例如 max_allowed_packet,这可能会间接限制值的数量。如果将此值设置为 1024(字节),则只能有效地使用有限数量的值。 @Progman 你有间接限制查询值的来源吗? @VinShahrdar 答案中的引用来自 MySQL 官方手册。 我明白这一点,但官方手册没有详细说明超过 max_allowed_pa​​cket 限制时会发生什么。我正在解决一个类似的问题,其中一个查询使用了一个 IN 运算符,其中包含大量值(超过 100,000 个),我注意到一些预期的项目没有回来,这导致了我这个线程!跨度> 【参考方案2】:

据我所知,在 mysql 中,IN 语句中的项目没有限制。

尽管在 oracle 中,IN 语句中有 1000 个项目的限制。

但是IN 中的项目越多,除非该列被索引,否则您的查询性能会变慢。

【讨论】:

取决于,如果 IN 是搜索主键,快速原因是从索引返回【参考方案3】:

1073741824 这是 Mysql 文档中给出的限制

【讨论】:

感谢您的分享,我想这是被否决的一个主要原因是因为它没有说明查询的 IN 条件内的元素数量不受直接限制,而是间接受到整体的限制此配置参数用于的查询大小。无论如何,我发现在这里找到默认设置很有用,谢谢

以上是关于MySQL IN 条件限制的主要内容,如果未能解决你的问题,请参考以下文章

有条件地限制来自 mySQL 的结果数量?

我的 mysql 查询中的错误与限制条件

MySQL还不支持限制&& in / all?

mysql group by,两个条件,限制1

MySQL 查询语句SELECT和数据条件过滤

MySQL 修改账号的IP限制条件