このようなSQLクエリの場合。
Select * from TABLE_A a
JOIN TABLE_B b
ON a.propertyA = b.propertyA
JOIN TABLE_C
ON b.propertyB = c.propertyB
テーブルの順序は重要ですか。結果には関係ありませんが、パフォーマンスに影響しますか?
表 C のデータは、a または b よりもはるかに大きいと想定できます。
SQL ステートメントごとに、エンジンはクエリ プランを作成します。したがって、それらをどのように配置しても、エンジンは正しいパスを選択してクエリを作成します。
プランの詳細http://en.wikipedia.org/wiki/Query_plan
ただし、エンジンが正しいパスを選択していないと思われる場合は、ヒントを使用して、クエリの順序と計画を強制するために使用している RDBMS を検討する方法があります。
いいえ。
まあ、これが起こる可能性は非常にごくわずかです。ジョナサン・ルイスによるこの記事を参照してください。基本的に、可能な結合オーダーの数は非常に急速に増加し、オプティマイザーがすべてをチェックするのに十分な時間はありません。非常にまれなケースでは、テーブルの順序がタイブレーカーとして使用されることがあります。しかし、私はこれが実際に起こっているのを見たことがなく、実際に起こっていると聞いたことさえありません。心配する必要はありません。
ここでテーブルの順序によって違いが生じることがあります(異なる結合を使用している場合)
実際に私たちの結合は、クロス プロダクト コンセプトに取り組んでいます
このようなクエリを使用している場合A join B join C
このような扱いになります(A*B)*C)
AテーブルとBテーブルを結合した後に最初の結果が得られ、次にCテーブルと結合することを意味します
したがって、A(100レコード)とB(200レコード)を内部結合した後、(100レコード)が得られる場合
そして、これら ( 100 レコード ) は (C の 1000 レコード ) と比較されます