私はPostgresをバッキングデータベースとして使用するアプリケーションで作業しています。私は入力コントロールを複数選択してクエリの入力値を入力することで、DB上でSELECT
クエリを実行するコンポーネントを作成しています。従来、この入力コントロールは従来の選択コントロールであったため、一度に1つのオプションしか指定できませんでした。複数選択が実装されているPotsgresパフォーマンス:WHERE =単一の値のWHERE IN(...)
SELECT * FROM items WHERE code = 'value1';
した後、SQLクエリは次のようなものになります:
SELECT * FROM items WHERE code IN ('value1', 'value2', 'value3');
をしかし、私は疑問を持っていることは、SQLクエリは、このようになります意味しましたユーザーが複数選択で単一の値のみを指定した場合。それは一つの値だけが括弧内に指定されていることを意味します:
SELECT * FROM items WHERE code IN ('value1');
私はこのクエリは意味的にWHERE ... = ...
を使用したクエリと同じであることを認識しています。私の質問は、両者の間に大きなパフォーマンス差があるかどうかです。私は、1つの値だけが指定されている場合、とWHERE ... IN (...)
文を置き換えるかどうかを選択するアプリケーションロジックを追加することを検討しましたか?この最適化は必要ですか?実際、両方のケースで性能が実際に同じであれば、WHERE ... IN (...)
がより柔軟な場合にWHERE ... = ...
を使用するとどうして気になるのですか?マイクロ最適化について心配していますか?
ありがとうございます。
:まだ意味的に等価であるが、あなたが試みることができるとまったく同じ計画に書き換えされていないクエリの別の例を参照するには
/docs/current/static/using-explain.html) –
重複は意図的ではありませんでした。私は尋ねる前にSOFでこの問題を調べようとしましたが、見つけられませんでした。 – ecbrodie
上記の質問はPostgresに関するものであり、既存のものがMySQLに特有のものであると指摘されているので、実際は重複していません。クエリの書き換えルールは常にすべてのRDBMSに適用されると想定することはできません。 –