繁体   English   中英

SQL(DB2)WHERE子句优化

[英]SQL(DB2) WHERE clause optimization

我将大量产品收集到一个数组中,该数组按行和项命名唯一的产品。 然后,将其提供给SQL语句的WHERE子句。 当产品列表变得很大时,我的WHERE子句也会扩展为一个丑陋的混乱局面。 因此,以下是我的WHERE子句的示例:

 WHERE FOO = 'Y'
 AND ((iline = ? AND iitem = ? )
 OR (iline = ? AND iitem = ? ) 
 OR ... 
 OR (iline = ? AND iitem = ? ))

依此类推,每个“ iline =?AND iitem =?” 是独特的产品。 显然,我不是专家,但是似乎在WHERE子句中偶尔有100个以上的OR并不是很有效,我可以通过某种方式做得更好。

谢谢。

您可以使用如下形式:

Presuming, iline has values like A,B,C,D,E.... and iitem posses 1,2,3,4,5... Now, you need combinations to be satisfied like 
(iline = 'A' AND iitem = '2'), 
(iline = 'E' AND iitem = '2'), 
(iline = 'B' AND iitem = '3'), 
(iline = 'A' AND iitem = '3'), 
(iline = 'E' AND iitem = '2'),
(iline = 'B' AND iitem = '4')

这可能会挤压到

WHERE FOO = 'Y'
AND (iline = 'A' and iitem IN ('2','3'))
AND (iline = 'B' and iitem IN ('3','4'))
AND (iline = 'E' and iitem IN ('2','3'))

理想情况下,您需要添加:

  • 当您在iline上患有疾病时,AND
  • 现有条件IN的另一个文字。 假设您必须添加一个新条件(iline = 'B' and iitem = '5') ,而不是添加一个新的OR,您可以简单地在现有iline ='B'条件中添加一个文字'5',例如(iline = 'B' and iitem IN ('3','4','5'))

希望我能阐明我的概念,请让我知道您的问题。

我怀疑它是否更有效率,但是您可以使用case语句代替:

WHERE 
  FOO = 'Y'
  AND iline = CASE iitem
                WHEN ? THEN ?
                WHEN ? THEN ?
                ...
              END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM