2017-02-04 18 views
1

顧客と注文の2つのテーブルがあります。顧客は1つ以上の注文を持つことができます。私は実行速度の点で違いを理解したいと思います。どんなアイデアも私がそれをよりよく理解するのに役立ちます。だから、お返事をいただいた皆さん、ありがとうございます。これらの2つの結合SQLクエリの違いは何ですか?

1)

SELECT `customers`.* FROM `customers` 
LEFT JOIN `orders` ON `orders`.`customer_id` = `customers`.`id` 
WHERE `orders`.`status` = 1 

2)

SELECT `customers`.* FROM `customers` 
LEFT JOIN `orders` ON `orders`.`customer_id` = `customers`.`id` AND `orders`.`status` = 1 
+0

**実行速度** - 2つのクエリは同等ではないため、速度の比較では意味がありません。 – GurV

答えて

3

最初のものはINNER JOINとして作用します。あなたはwhere句で、右の表をフィルタするとanything = NULLLEFT JOINとして動作します

2つ目を失敗するため、右の表から非マッチングNULLレコードは、フィルタリングされます。条件AND orders.status = 1が言うの参加で、私は上記のようなレコードは、パフォーマンスについての質問については、左の表

と結合する両方のパフォーマンスを比較することはできませんので、クエリが本当に

0

最初はINNER JOINに変身同じではありません一致しない行の場合、orders.customer_idNULLです。したがって、WHERE句はすべてをフィルタリングします。

関連する問題