我们应该在检索数据时避免 DB2 SQL 中的 IN 子句吗?
Posted
技术标签:
【中文标题】我们应该在检索数据时避免 DB2 SQL 中的 IN 子句吗?【英文标题】:Should we avoid IN clause in DB2 SQL while retrieving data? 【发布时间】:2014-06-20 17:28:46 【问题描述】:仅使用不提及 where 子句 (IN) 的 select 命令从 DB2 表中获取所有数据是一种好习惯吗?
我被告知要避免在 SQL 中传递 10 个字符串值的 IN 子句。
【问题讨论】:
没有where
子句的选择确实很奇怪。没有 in
运算符的 where
子句很好。
为什么要避免做 SQL 标准规定的事情?
只有 10 个值应该没问题...如果您传递的值超过 100 个,我可能会考虑创建一个临时表,并使用 JOIN
或类似的东西进行过滤。但无论哪种选择,优化器都可能在内部处理几乎相同的任何一个。
就此而言,DB2 支持 CTE,因此您可以使用它来生成要加入的虚拟表。
使用什么替代方法避免 IN?出于什么原因避免它?
【参考方案1】:
是的,只要可以使用更好的替代方法,就应该避免使用 IN() 子句。 (如果您需要知道其他元素是否实际上更好,您需要指定环境、表定义、数据量、索引、正在执行的语句等。IOW,指定我们知道实际答案所需的一切到一个实际的问题。)
【讨论】:
以上是关于我们应该在检索数据时避免 DB2 SQL 中的 IN 子句吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Perl DBI 检索 DB2 SQL 存储过程的返回值?
如何在 ibm worklight 中通过 sql 适配器从 db2 检索或显示 html 页面上的数据?安卓混合应用开发