2011-08-04 6 views
3

私は最近、SQLのこの作品に出会った:今、私は代わりにインナーを使用して、このように参加をしていると思わなかっただろうちょうど決してMySQLのジョインの比較:何が速いのですか?

SELECT members.id 
FROM members, members_to_groups 
WHERE members.id = members_to_groups.memberId 
    AND members_to_groups.groupId = 1 

参加:

明らか
SELECT members.id 
FROM members 
INNER JOIN members_to_groups ON members.id = members_to_groups.memberId 
WHERE members_to_groups.groupId = 1 

の第二の方法それにはより多くのコードが必要ですが、どちらの方法にも客観的な好みがあり、何が最も速く実行されるのでしょうか?

答えて

4

両者は同じ速度で実行されますが、最初の方法を使用するたびにテロリストが勝ちます。

第1の方法は、移植性のない古いバージョンのsqlです。より大きいクエリの場合、WHERE句がテーブルを結合するためのものとフィルタリングの対象を区別することははるかに困難です。

3

あなたが知る唯一の方法は、実行計画を調べることですが、暗黙的および明示的な内部結合はまったく同じ実行計画につながります。したがって、パフォーマンスに違いはありません。明示的な結合ははるかに読みやすくなります。

また、@ gbnにはimplicit joins are not valid semanticallyと記載されています。 :)

0
WHERE members.id = members_to_groups.memberId => occurs at row level 

INNER JOIN members_to_groups ON members.id = members_to_groups.memberId => occurs at table level 

のでに対し、それらが高速であるテーブル・レベルではなく行レベルで発生加入

関連する問題