对于静态数据,Oracle IN子句的限制为1000,但它接受来自子查询的无限数据。为什么?为什么oracle IN子句仅对静态数据有1000的限制?
回答
这是对任何expression list的限制:
用逗号分隔的表达式列表可以包含超过1000个表情没了。
为什么1000?据推测实施需要某种限制,而这可能似乎绰绰有余。这种限制可能是或几乎是在几十年前设定的,这也是限制的性能原因,特别是在这种情况下,优化器将IN
转换为多个OR
语句(您可以看到,如果您看执行计划)。
我很难想出一个合理的方案,需要得到任何附近的位置,固定值无法从其他数据派生出来作为子查询。例如:
我怀疑它与logical database limits有些相关,例如表中不能有超过1000个列;由于在插入语句中使用表达式列表来列出要插入的列和值,因此表达式列表必须能够匹配,但可能没有理由超过它。
推测当然......没有看到软件的内部,你不可能得到明确的答案。
列数与表达式列表中元素的数量之间有趣的相关关系。从来没有想过这可能是相关的。 –
这是因为IN在列表中有大量值的性能很差。这只是OR子句的快捷方式,在数据库级别,引擎会将IN更改为OR。
你还应该避免在IN子句中进行子查询 - 更好地使用EXISTS。
'IN'和'EXISTS'在逻辑上是等效的。 Oracle优化器对它们进行相同的处理。你应该酌情使用它们中的任何一个,从性能的角度来看它并不重要。 –
尝试使用'exists'而不是'in'。您还可以使用'exists'创建子查询。
- 1. Oracle IN子句限制
- 2. IN子句中的值限制Oracle
- 3. netezza表的IN子句有限制吗?
- 4. HSQLDB/Oracle - 在IN子句中有1000多个项目
- 5. 为什么find_in_set有效,但IN子句
- 6. IN子句的非静态路径FROM
- 7. MySQL:对“IN”子句的条目是否有限制?
- 8. “where in”子句的实际限制
- 9. 有什么办法可以避免BigQuery的表限制为1000?
- 10. Sql Server中的“IN”子句限制
- 11. CQL3 SELECT ... IN子句中的元组数量是否有限制?
- 12. 我对Dapper的IN子句支持有什么不妥?
- 13. SQL IN语句的限制
- 14. Oracle从IN子句中选择数字
- 15. 针对Oracle数据库的限制ConnectionTimeout
- 16. 对IN的限制()
- 17. 没有联接的Oracle IN子句的性能影响是什么?
- 18. 带有'in'的DB2子查询,限制?
- 19. 带有IN语句的Oracle参数?
- 20. C如何将静态函数的用途限制为仅限于其文件?
- 21. 什么是Oracle 10G和Derby数据库的列数限制
- 22. 有什么不对的静态方法
- 23. 用JOIN更改IN以解决1000的限制
- 24. HQL IN子句只接受有限数量的值(MySQL数据库)吗?
- 25. 用于Oracle的Oracle准备语句的IN子句cx_Oracle
- 26. 如何改变静态的JTable限制动态(静态对象数组动态)
- 27. Oracle数据库的限制
- 28. “IN”子句的SQL对应
- 29. IN子句
- 30. 我对数据库有什么权限
不要质疑甲骨文Mightiness,它是禁止普通用户:D只是开玩笑。您可以使用WHERE par_id IN('a','b',...,'z')或par_id IN('或','pr'...'zd')覆盖它。 –
覆盖此的许多方法我在stackexhange中发现了3或4)。但是原因可能只是像Oracle预加载中的基本约束,查询中的最大字节等 – SriniV
如果您有超过十多个条目,则应该使用子查询无论如何,有些类型。 1000是一个任意大的限制 - 可能已经太大了。 –