我有很多类似的SQL语句:
SELECT foo FROM things WHERE user_id IN (1,2,3..n)
对于安全地适合IN子句的元素数量是否存在已知限制?
答案 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来支持它。