2017-05-22 6 views
3

私は2つの同じクエリを持っています。 doorbot_id_idx btree (doorbot_id) WHERE deleted_at IS NULL場所と参加者に違いはありますか?

この2つのクエリ間のパフォーマンスの違いがあります:最初に、私は複合インデックスを持って、私は

SELECT dings.id, doorbots.id 
FROM dings 
INNER JOIN doorbots ON dings.doorbot_id = doorbots.id AND 
      doorbots.id = 1615131 AND 
      deleted_at is NULL 
ORDER BY dings.created_at; 

joinにすべてのフィルタを置く第二にWhere

SELECT dings.id, doorbots.id 
FROM dings 
INNER JOIN doorbots ON dings.doorbot_id = doorbots.id 
WHERE doorbots.id = 1615131 AND 
     deleted_at is NULL 
ORDER BY dings.created_at; 

を使うのか? どうすればよいですか?

答えて

1

両方のアプローチが同じではないにしても、より近いパフォーマンスを提供する可能性が非常に高いです。クエリプランナーに汚れた仕事をさせてください。 :)

質問はので、この場合、あなたがしなければならないで、あなたのSQLに良い可読性を維持することです:WHERE句の

  • プットフィルタ式。
  • JOINに結合式のみを入れます。つまり、テーブル間の関係だけがここに移動します。
1

INNER JOINの場合、選択肢は同等であり、まともなSQLエンジンは、どのような方法でも最も効率的な方法で実行します。

個人的には、ON句にID比較のみを入れ、さらにフィルタはWHERE句に入ります。

関連する問題