1

自分で作成したクエリとエンティティ フレームワークで作成したクエリを比較すると、興味深い質問に遭遇しました。ストアド プロシージャで作成したクエリは次のとおりです。

select *
from TableA a
    join (select b.Col2, c.Col3
         from TableB b
            join TableC c on b.Col1=c.Col1
        where b.Col2 in (1,2,3,4)
        ) as bc on a.Col3=bc.Col3

エンティティ フレームワークによって作成されたクエリは次のとおりです。

select *
from TableA a
    join (select b.Col2, c.Col3
         from TableB b
            join TableC c on b.Col1=c.Col1
    ) as bc on a.Col3=bc.Col3 and bc.Col2 in (1,2,3,4)

私の質問は、SQLコンパイラが同じ方法でクエリを最適化するのに十分賢い場所ですか? (join/where 条件でインデックスが適切に定義されていると仮定します。

4

1 に答える 1

0

Teradata のような一部のスマート オプティマイザーでは、2 つのクエリのいずれも同じように書き換えられます。

 select a.columns,b.Col2,c.Col3  
 from TableA a

join TableB b
join TableC c 
on b.Col1=c.Col1
on a.Col3=bc.Col3 and bc.Col2 in (1,2,3,4)

説明を参照して、DBMS が何を行っているかを確認してください。

于 2013-05-28T20:04:08.813 に答える