【发布时间】:2010-03-11 15:41:38
【问题描述】:
我有很多这样的 SQL 语句:
SELECT foo FROM things WHERE user_id IN (1,2,3..n)
对于可以安全放入这样的 IN 子句的元素数量是否有已知限制?
【问题讨论】:
标签: sql mysql database postgresql limit
我有很多这样的 SQL 语句:
SELECT foo FROM things WHERE user_id IN (1,2,3..n)
对于可以安全放入这样的 IN 子句的元素数量是否有已知限制?
【问题讨论】:
标签: sql mysql database postgresql limit
PostgreSQL 中的 1000 限制不是硬限制,而是优化限制,即;在 1000 之后 PostgreSQL 不能很好地处理它。当然,我不得不问你到底在用 1000 个条目的 IN 子句做什么。
【讨论】:
没有技术限制,但有某种“合理”的限制..
IN 子句中的元素过多意味着查询的设计可能很糟糕(恕我直言)
【讨论】:
对于 MySQL,来自manual:
IN 列表中值的数量仅受max_allowed_packet 值的限制。
【讨论】:
我在使用 sqlalchemy 为 postgres 创建的动态查询中使用了它,参数超过 25k。此外,它们通过位置参数 (*args) 传递给 python 函数....但我没有注意到我的情况放缓。 YMMV
【讨论】:
不,但在使用 IN 语句时要小心。如果您在 IN 语句中使用子查询,则性能可能会受到负面影响,因为 SQL Server 必须生成整个结果集并在内部构建一个可能很大的 IF 语句。
例如,如果子查询返回大量行,Select * From MyTable where MyColumn IN (Select myColumn from AnotherTable) 之类的内容可能会有点慢。通常使用 EXISTS 会更有效。
【讨论】:
我很确定 Postgres 的限制为 1000....但找不到任何 docco 来支持它。
【讨论】: