3

私は C# / ASP.NET MVC / Entity Framework プロジェクトを継承しましたが、少し遅いです。DB には多くのデータはありませんが、呼び出しによって.Include()速度が低下していました。

しかし、私は非常に奇妙なものを見つけました。数字(5列)だけの2k行のテーブルがあります。検索している列にインデックスがあります。

するとき:

_entities.MyTable.Where(x=> x.Id1 == 4 && x.Id2 == 5).First()

私の開発マシンでは 1800 ミリ秒かかります。

しかし、私がするとき:

_entities.MyTable.Where("it.Id1 = 4 and it.Id2 = 5").First()

10msくらいかかります。

どうしたんだ?LINQ 式が非常に遅くなる理由がわかりません。

4

2 に答える 2

0

Sql Profiler を開き、EF からのクエリを調べます。それを分析して、計画を立ててください。EF は、インデックスを取得せずに、奇妙な方法でクエリを実装しているようです。

于 2012-04-06T07:01:33.617 に答える
0

最初の例では where 句を実行するために EF が SQL を生成する必要があるのではないでしょうか。

EF はクエリの生成が非常に遅いことがわかりました。どちらの場合もかなり単純なクエリであるため、この場合はそうではないようです。

最初のクエリをコンパイルして複数回実行して、実行時間に SQL を生成するだけでなく、実際に SQL を実行することだけが含まれていることを確認しましたか?

于 2012-04-07T05:16:39.973 に答える