編集:あなたの質問(およびKirk Wollの)コメントに基づいて、結合の順序は美的であり、結果の実行プランに直接影響しないことを理解する必要があります。クエリオプティマイザは、最も効率的な順序で結合を実行し、ほとんどの場合、ヒントを必要とせずに適切な結合操作を使用します。
結合順序の美学に関しては、これは少し主観的ですが、クエリを読むときに論理的に意味のある順序でテーブルを結合すると思います... @ HeaderIdで開始する場合は、そのテーブルから開始します、JOIN
次に子テーブルへ:
FROM
Header h
JOIN Items i ON h.HeaderId = i.HeaderId
JOIN Details d ON i.ItemId = d.ItemId
WHERE
h.HeaderId = @HeaderId
ただし、@ DetailIdでクエリを開始した場合は、逆の順序で参加します。
FROM
Details d
JOIN Items i ON d.ItemId = i.ItemId
JOIN Header h ON i.HeaderId = h.HeaderId
WHERE
d.DetailId = @DetailId
しかし、それは主観的なものであり、私の個人的な好みです。
sを含め始めると、主観的ではなくなりますOUTER JOIN
... sを回避するようにクエリを構造化してRIGHT OUTER JOIN
、代わりにLEFT OUTER JOIN
'sを使用してください。
デフォルトでは結合ヒントを使用しないでください...実際、それらを使用することはほとんどありません。クエリオプティマイザは、最適な実行プランを選択するのに非常に優れています。計画を改善するために結合のヒントを提供する必要があるインスタンスは1つしかありませんでした...その時点でクエリが実行されていたサーバーでは大幅に役立ちましたが、データベースが別のサーバーに移行されたときは、私の参加ヒントはクエリのパフォーマンスを破壊しました。したがって、繰り返しになりますが、通常、結合のヒントを提供することはお勧めできません。