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_packet 限制时会发生什么。我正在解决一个类似的问题,其中一个查询使用了一个 IN 运算符,其中包含大量值(超过 100,000 个),我注意到一些预期的项目没有回来,这导致了我这个线程!跨度>
【参考方案2】:
据我所知,在 mysql 中,IN
语句中的项目没有限制。
尽管在 oracle 中,IN
语句中有 1000 个项目的限制。
但是IN
中的项目越多,除非该列被索引,否则您的查询性能会变慢。
【讨论】:
取决于,如果 IN 是搜索主键,快速原因是从索引返回【参考方案3】:1073741824 这是 Mysql 文档中给出的限制
【讨论】:
感谢您的分享,我想这是被否决的一个主要原因是因为它没有说明查询的 IN 条件内的元素数量不受直接限制,而是间接受到整体的限制此配置参数用于的查询大小。无论如何,我发现在这里找到默认设置很有用,谢谢以上是关于MySQL IN 条件限制的主要内容,如果未能解决你的问题,请参考以下文章