要件の変更により複雑になった複雑な SQL where 句があります。ケースには 4 つの基本的なセットがあり、それぞれ他の要因の組み合わせが異なります。(私の意見では) 4 つのケースを where 句の個別のブランチとして保持し、各ブランチで冗長な基準を繰り返す方が読みやすいと思います。しかし、データベース エンジンがそれをどの程度最適化するかはわかりません。
冗長な形式の式を次に示します。実際の基準を文字に置き換えました。A は「分岐」基準で、4 つの形式があります。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全般についての回答が知りたいです。