私はmysqlを使用していますが、両方の方法でクエリできます。 つまり、クエリを以下のように書くことができます: select * from x where()or()or()。 。 ..; と書くことができます。 select * from x where()and()and()。 。 ..;OR OR VSS AND
どちらがお勧めですか?パフォーマンス上の問題はありますか?
私はmysqlを使用していますが、両方の方法でクエリできます。 つまり、クエリを以下のように書くことができます: select * from x where()or()or()。 。 ..; と書くことができます。 select * from x where()and()and()。 。 ..;OR OR VSS AND
どちらがお勧めですか?パフォーマンス上の問題はありますか?
パフォーマンスを忘れて「好き」のものを忘れた場合は、クエリの内容に応じてor
,and
を使用する必要があります。これは、真理値表を使用する基本boolean logicです。 select * from x where() or() or()
はselect * from x where() and() and()
とは大きく異なります。
どのようにパフォーマンスが向上するのでしょうか?両方のクエリが異なる方法で動作しますか?
where() or() or()
がある場合、条件のいずれかが満たされた場合に結果が返されます
where() and() and()
がある場合、結果は返されます。すべての条件を満たす場合にのみ結果が返されます。
サンプルの述語は意味的に等価ではないため、簡略化したか否定を否定したのか忘れてしまったのでしょうか?例えばもっとこのような何か:
WHERE (NOT col1 = 'T') OR (NOT col2 = 'T') OR (NOT col3 = 'T');
はもしそうなら、私は何@dariooはコメントで言ったことは、エンジンがそれとして正しいブール論理を解釈すること、すなわち、答えがあると思い
WHERE NOT (col1 = 'T' AND col2 = 'T' AND col3 = 'T');
と同じですフィットを見て、おそらく心配する価値はありません。あなたの仕事は、あなたがパフォーマンステストになる候補構築物が確かに意味的に同等であることを保証することです:
必ずしもそうではありません。私たちが論理から知っているように、問題が特定の方法であれば、両方が同じになることがあります。しかし、そのような問題を見つけるのは難しいです。とにかく、私は私の答えを得た。 –
@Mazhar:実際には、ANDsとORを使って同じ結果が得られる場合がありますが、理論的には実際よりもそのような例が見つかる可能性が高くなります。 – darioo
そうだね。しかし、私はそのような問題が実際にはあります。なぜ私はパフォーマンスについて知っておく必要があるものがあるかと思った。 –