2013-03-21 21 views
5

パフォーマンス面でEntity Framework linqクエリ句の順序について心配すべきでしょうか?EF linqクエリ句の順序はパフォーマンスに影響しますか?

次の例では、2つのwhere節の順序を変更して、DB参照にパフォーマンスの影響を与えることができますか?

 using (var context = new ModelContext()) 
     { 
      var fetchedImages = (from images in context.Images.Include("ImageSource") 
           where images.Type.Equals("jpg") 
           where images.ImageSource.Id == 5 
           select images).ToArray(); 
     } 
+1

生成されたSQLをWhereと '&&'で1つの条件でチェックしてください。同じであれば違いはありません – Habib

答えて

4

いいえ、これら2つのwhere条項の変更すると、パフォーマンスに影響しません。 生成されたSQLは、とにかく次のようになります。

WHERE [condition1] AND [condition2] 

以外にも、あなたは論理演算子と組み合わせた条件、書くことができます。

where images.Type.Equals("jpg") && images.ImageSource.Id == 5 
+0

これは、短絡を無視する場合のみです: '[condition2]'がfalseの場合more '[condition1]'よりも頻繁に、順序を入れ替えることでパフォーマンスが向上するかもしれません。 – RoadieRich

+0

@RoadieRich:あなたは理論的に正しいですが、これらの2つの条件を交換するときに、**差異を見る**と思うかもしれませんか? :) – Dennis

+0

適切な大きさのデータセットがあれば、そうかもしれません。 – RoadieRich

-1

を一般的なケースはそう、where演算子は「短絡」ということです最初のものが偽であれば、2番目のものは検査されません。したがって、1つが頻繁に失敗する場合は、一般的に最初にチェックします。

しかし、これは、より頻繁に発生する障害の処理が遅い場合には、これが壊れます。

確かに唯一の方法は、適切なツールを使用してコードをプロファイリングすることです。

+0

LINQ-to-Objectsには当てはまりますが、彼は具体的には、この回答が適用されない「DB参照にパフォーマンスに影響を及ぼす」と述べています。 SQLに変換されると、dbプロバイダはそれをどうするかを決定します(Gert Arnoldが他の答えで述べたように)。 – Ocelot20

関連する問題