9

これをテストしようとしていますが、タイミングが大きく異なるため、テストに疑問があります。

-- Scenario 1
SELECT * FROM Foo f 
    INNER JOIN Bar b ON f.id = b.id 
    WHERE b.flag = true;

-- Scenario 2 
SELECT * FROM Foo f 
    INNER JOIN Bar b ON b.flag = true AND f.id = b.id;

論理的には、シナリオ 2 の方が効率的であるように見えますが、SQL サーバーがこれを最適化できるほどスマートかどうかはわかりませんでした。

4

2 に答える 2

-5

受け入れられた答えは、テストケースに対してのみ正しいです。

前述の見出しの質問に対する答えはyesです。制約を結合条件に移動すると、クエリが大幅に改善され、保証されます。私はこれに似たフォームを見たことがあります (しかし、正確ではないかもしれません)...

select * 
  from A
 inner join B
    on B.id = a.id
 inner join C
    on C.id = A.id
 where B.z = 1 and C.z = 2;

...「結合時」の同等のものと同じ計画に最適化しないため、どちらの方法でも最適に解決される可能性のある単純なケースでも、ベストプラクティスとして「結合時」制約を使用する傾向があります。

于 2013-08-03T09:24:23.297 に答える