[英]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 = '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.