2017-08-02 9 views
0

は、このクエリを想定してください:あなたが知っているようwhere節の条件を使用する方が良いか、join句ですか?

SELECT p.* FROM posts p 
JOIN posts_tags pt ON pt.post_id = p.id 
JOIN tags t ON pt.tag_id = t.id AND t.name = 'php' 

SELECT p.* FROM posts p 
JOIN posts_tags pt ON pt.post_id = p.id 
JOIN tags t ON pt.tag_id = t.id 
WHERE t.name = 'php' 

は、両方が同一の結果を持っています。しかし、この条件t.name = 'php'は、最初のクエリのJOIN句にあり、2番目のクエリのWHERE句にあります。私はどちらが良いのか、なぜそれが良いのかを知りたいのですが?

+1

彼らは内部結合のために同じです。この位置は外部結合のための違いを作ります。 –

+0

@ GordonLinoff *パフォーマンスの観点*は同じですか? –

+2

結果クエリプランは同じになります。これらは同等のクエリです。 –

答えて

0

一般に、Where節に条件を追加すると、コードがより明確になります。それらをAND句に追加すると、JOINは2つのフィールドの組み合わせに基づいているという感じが得られます。

条件をWhere句に追加すると、テーブルが大きい場合に、結合前でもオプティマイザがレコードをフィルタリングするのに役立ちます。私はそれをWHERE句にとどめることを提案します。

EDIT また、この関連の記事を参照してください。Join best practices

関連する問題