2

このような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 よりもはるかに大きいと想定できます。

4

3 に答える 3

1

SQL ステートメントごとに、エンジンはクエリ プランを作成します。したがって、それらをどのように配置しても、エンジンは正しいパスを選択してクエリを作成します。

プランの詳細http://en.wikipedia.org/wiki/Query_plan

ただし、エンジンが正しいパスを選択していないと思われる場合は、ヒントを使用して、クエリの順序と計画を強制するために使用している RDBMS を検討する方法があります。

于 2012-09-16T07:39:12.647 に答える
0

いいえ。

まあ、これが起こる可能性は非常にごくわずかです。ジョナサン・ルイスによるこの記事を参照してください。基本的に、可能な結合オーダーの数は非常に急速に増加し、オプティマイザーがすべてをチェックするのに十分な時間はありません。非常にまれなケースでは、テーブルの順序がタイブレーカーとして使用されることがあります。しかし、私はこれが実際に起こっているのを見たことがなく、実際に起こっていると聞いたことさえありません。心配する必要はありません。

于 2012-09-19T18:42:18.933 に答える
0

ここでテーブルの順序によって違いが生じることがあります(異なる結合を使用している場合)

実際に私たちの結合は、クロス プロダクト コンセプトに取り組んでいます

このようなクエリを使用している場合A join B join C

このような扱いになります(A*B)*C)

AテーブルとBテーブルを結合した後に最初の結果が得られ、次にCテーブルと結合することを意味します

したがって、A(100レコード)とB(200レコード)を内部結合した後、(100レコード)が得られる場合

そして、これら ( 100 レコード ) は (C の 1000 レコード ) と比較されます

于 2012-09-16T09:52:58.927 に答える