簡體   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