web-dev-qa-db-ja.com

MySQLパフォーマンス:JOIN ONとWHERE

重複の可能性:
MySQL:内部結合と場所
明示的または暗黙的なSQL結合

"JOIN ON"と "WHERE"句を使用して結合クエリを実行すると、パフォーマンスに違いはありますか? (テーブルの数やテーブル内のエントリの数に関係なく)

このトピックがすでに議論されているかどうかはわかりません。そうだとしても、mySQLの最新バージョン(5.1以降)で状況が変わったかどうかを知りたいのです。

Explainステートメントは、考慮に入れられる行数に多くの違いがあることを明確に示しています。

私が使用している構文は次のとおりです。

JOIN ONの使用

SELECT <field names>
FROM <table1>
JOIN <table2> ON <join_condition>
AND JOIN <table3> ON <join_condition> 
AND JOIN <table4> ON <join_condition> 
.... 

WHEREの使用

SELECT <field names> 
FROM <table names list separated by comma> 
WHERE <join_condition> 
AND <join_condition> 
AND <join_condition> 
.... 

したがって、JOIN ONまたはWHERE句の使用が違いを生むかどうかはわかりません。手伝ってください。

28
Vasanthakumar V

これらの2つのアプローチの適切な分析を次に示します。 SQL左結合とFROM行の複数のテーブル?

この説明は一般的なものであり、MySQLがこの問題で何を行うかはよくわかりません。しかしどちらにしても、JOINは常により明確で明確であり、クエリのロジックに大きな変更を加えることなく、あるエンジンから別のエンジンに移動できます。

3

「JOIN」を使用すると、「LEFT JOIN」が実行されると思います。 「INNER JOIN」を使用して、Explainステートメントが同じかどうかを確認してください。

SELECT <field names>
FROM <table1>
INNER JOIN <table2> ON <join_condition>
INNER JOIN <table3> ON <join_condition> 
INNER JOIN <table4> ON <join_condition> 
...

内部結合を使用する場合、2つのクエリにパフォーマンスの違いがあるとは思いません。適切なインデックスを使用することについて、さらに心配することになります。結合条件がインデックス付きの列を使用して一致できることを確認します。

2
Nick Clark