【发布时间】:2010-10-22 02:34:08
【问题描述】:
我有一个复杂的 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 的答案。
【问题讨论】:
标签: sql database optimization boolean boolean-logic