結合で参照される列にインデックスを作成する必要はありますか? など。ON句の列にインデックスが必要ですか?
SELECT
*
FROM
left_table
INNER JOIN
right_table
ON
left_table.foo = right_table.bar
WHERE
...
私はleft_table(foo)、right_table(bar)、またはその両方でインデックスを作成する必要がありますか?
私はインデックスがWHERE句の左側に使用されていることを確実に知る指標とし、なし(Postgresqlの)EXPLAINと比較
(right_table.bar = left_table.foo)
のための周りに切り替える使用したとき、私は異なる結果に気づいたが、私はON句に列挙されている列に索引が必要かどうか疑問に思っています。
マージ結合アルゴリズムは、通常、ON条件の両側のインデックスで高速に実行されます。大規模なカーディナリティー結合の場合、これが最速の戦略である可能性があります。 2番目の索引がなければ、オプティマイザはマージ結合戦略を選択することさえできません。 –