2009-04-17 19 views
2

よりもはるかに高速ちょっとそこ私は、私のコードで問題を抱えて、私は、データベース標準のSQLクエリのLINQ 2 SQL

  1. (*選択してから...)標準SQLクエリにクエリを実行する3つの方法を比較
  2. きゅうクエリ
  3. プリコンパイル済みLinqQuery(CompiledQuery)

今、私が得た結果は、プリコンパイル済みLingQueryが5倍きゅうクエリよりも高速ですが、はるかに興味深いイスト標準SQL QUERものであるということですyは、Precompiled LinqQueryより約10倍高速です。クエリが実行されるテーブルは、他のテーブルとの関連付けのない単純なテーブルの1つです。

テーブルを面白くするという事実は、私が意味するすべてのプライマリキーをまとめて表す5つの列で構成されているということです。すべての列が一意であるため、テーブルには他の列のような行はありません。すべての列が索引付けされます。

LinQに何が問題になるのか誰かが考えていますか?種類で

はどのように測定している

セバスチャン

答えて

2

linqが生成する実際のクエリを見たことがありますか?これらをSQLクエリと比較すると、いくつかの回答が得られるかもしれません。

これは、SQLプロファイラを使用するか、linqデータコンテキストのOutプロパティをリッスンすることで実行できますか?

DataContext ctx = new ...; 
ctx.Log = Console.Out; 
//Now execute the linq query, and the query will be output to the console. 
+0

クエリをコピーしたのとまったく同じクエリですdatacontextとSQLの私のクエリのために使用 –

+0

奇妙な...クエリは、非常に(クエリツリーからクエリを作成するために多くの処理)、非常に複雑ですが、サーバー上で実行する高速ですか?それはおそらく結果を歪める可能性があります... –

+0

はい私はクエリが複雑だと思うが、私は、Expressionツリーがビルドされるたびに、コンパイル時に問題を解決すると思った。 –

1

に関しては?すべてのクエリ結果を使用しているのですか、単にクエリを実行していますか? (例えば、LINQが結果を取得している可能性があります。)

これはクエリを2回目に実行するか、最初の実行にかかった時間を測定していますか?

+0

はい私たちは、クエリを実行するだけでなく、フェッチした結果をすべて使用しています。すべてのクエリの時間を1つではなく測定します。 –

2

クエリがキャッシュされていないことを確認してください。結果がスキューする可能性があります。

+0

我々は複数のクエリを持っていない、各クエリは一度実行されます。あなたはそれを意味しますか? –

+0

私は、クエリがLinqで最初に実行された場合、SQL Serverはクエリの実行計画を作成する必要があることを意味しています。 SQL Serverを使用して同じクエリを実行すると、プランは既にキャッシュされているため、SQLは再作成に時間を費やす必要はありません。 DBCC DROPCLEANBUFFERSとDBCC FREEPROCCACHEの間で次のテストを実行するか、各テストを1回実行してから2回目のテストが実行されるようにします。 –

+0

同じデータ行を何度も何度もクエリすると、それがmenoryにキャッシュされ、データがRAMから来てハードドライブではないため、より早くクエリが作成されます –