我有一個複雜的SQL where子句,由於需求更改而變得更復雜。有四種基本的案例集合,每種都有其他因素的不同組合。它更具可讀性(在我看來)將四種情況作爲where子句的獨立分支,並在每個分支中重複冗餘標準。但我不知道數據庫引擎如何優化。複雜SQL where子句:是否要因子邏輯
下面是冗餘形式的表達式。我用字母替換了實際的標準。 A是「分支」標準,有四種形式。除非另有說明,否則所有表述的格式均爲field='value'
。
A1 AND B AND C AND D
OR A2 AND B AND C AND D AND E AND F1 AND G
OR A3 AND A3a AND B AND C AND D AND E AND F1 AND G
OR A4 AND B AND C AND D AND F2
除A4之外的所有A都是field in ('value1','value2')
的形式。 D是field > 'value'
。 G的形式是field not in (subquery)
。
下面是表達式,這個表達式是我認爲最不重要的形式的因素。
B AND C AND D AND (
A1
OR (
E AND F1 AND G AND (
A2
OR (A3 AND A3a)
)
)
OR (A4 AND F2)
我的問題是我是否應該考慮此因素將表達其最簡單的(至少冗餘)邏輯形式,還是它的確定以保持它在它的更多的冗餘,但也更可讀的形式。目標數據庫是Sybase,但我想知道一般RDMBS的答案。
好的建議。標準G使用子查詢會使UNION方法效率更低(因爲理論上它會發生在兩個SELECT中),還是數據庫引擎會優化這些類型的事情? – 2009-04-27 16:44:19