我有一个复杂的 SQL where 子句,由于需求更改而变得更加复杂。有四组基本案例,每组都有其他因素的不同组合。将四个案例作为 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 的答案。