在mysql或postgres中,IN(1,2,n)语句的大小是否有限制?

时间:2010-03-11 15:41:38

标签: sql mysql database postgresql limit

我有很多类似的SQL语句:

SELECT foo FROM things WHERE user_id IN (1,2,3..n)

对于安全地适合IN子句的元素数量是否存在已知限制?

6 个答案:

答案 0 :(得分:7)

PostgreSQL中的1000限制不是硬限制,它是一个优化限制,即; 1000之后PostgreSQL没有很好地处理它。当然,我不得不问你在世界上用1000条IN条款做什么。

答案 1 :(得分:4)

没有技术限制,但存在某种“良好意识”限制..

IN子句中包含太多元素意味着查询可能设计不好(imho)

答案 2 :(得分:4)

对于MySQL,来自manual

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

答案 3 :(得分:2)

我在使用sqlalchemy为postgres创建的动态查询中使用了它,参数超过25k。此外,它们通过位置参数(* args)传递给python函数....但我没有注意到我的情况减速。 YMMV

答案 4 :(得分:0)

不,但在使用IN语句时要小心。如果在IN语句中使用子查询,性能可能会受到负面影响,因为SQL Server必须生成整个结果集,并在内部构建一个可能很大的IF语句。

例如,如果子查询返回大量行,则Select * From MyTable where MyColumn IN (Select myColumn from AnotherTable)之类的内容可能会有些慢。通常使用EXISTS效率更高。

答案 5 :(得分:0)

我很确定Postgres有1000的限制....但找不到任何docco来支持它。