this SQL questionへの回答では、固定値のIN()
演算子が同じ内容のINNER JOIN
よりもはるかに遅いという声明が発生しました。値のテンポラリテーブルを作成し、それらにジョインしてください。それは本当ですか(一般に、MySQL、他のSQLエンジンを使用しています)、もしそうなら、なぜですか?直感的には、IN
のほうが速くなければなりません。潜在的な一致を、既にメモリー内にあり、必要な形式の固定値セットと比較しています。JOINでは索引を参照し、 INで必要とされない他の操作を実行します。私は何か重要なものを逃していますSQL固定値IN()とINNER JOINパフォーマンスの比較
this questionとは異なり、重複しているので、私はIN()
のサブクエリではなく固定値のセットを持っていると言います。
これは間違いなくDBプラットフォームによって異なります。 SQL ServerとPostgreSQLの私の経験では、インデックスに対する定数の 'IN'節は非常に高速です。 – Pointy
リンク先の質問はSQL Serverです。あなたはすでに認識しているかどうかは分かりませんが、MySQLは[サブクエリでも]非常に壊滅的に悪いことがあります(http://stackoverflow.com/questions/3417074/why-would-an-in-condition-be-slower -than-in-sql/3417190#3417190) –
@Martinオリジナルの質問(最初のリンク)はMySQLに関するものでした。私はサブクエリに関するMySQLのトラブルについて知っていますが、定数リストでは問題ないと思ったので、@ DVKの答えが私を驚かせました。 – StasM