2016-08-23 6 views
2

私はC#プログラミング言語環境でデータを操作することに関して2つの意見があります。パフォーマンス比較SQLクエリとLinqデータクエリ

  1. select * from where ...)sqlを使用してクエリを実行し、データを取得します。
  2. select * from)すべてのデータを取得し、オブジェクトリストに対してLinqクエリを使用します。

大きなサイズまたは平均サイズデータのこれらの意見に関するパフォーマンスの違いは何ですか?両方を使うことはできますか?

+0

大きなデータを処理する場合は、フィルタ処理されたデータを読み込むほうが効率的です。しかし、数行しかなく、頻繁に 'where'clouseを変更すると、一度にすべてをロードする方がより合理的になる可能性があります。 –

+0

測定を考慮しましたか? –

+0

最初の時間は99%です。しかし、それは簡単にテストすることができますので、それをテストしますか? SQLは大きなデータセットを効率的にフィルタリングするように作られています。 SQLは手続き型ではありません。それはセットで動作します。セットは大規模なデータセットを手続き型言語よりも常に高速でフィルタリングします。 LINQ(LINQ to SQLではなく)はデータセットを反復処理します。つまり、基本的にforeachループのラッパーです。 – Liam

答えて

5

パフォーマンスへの一般的な答えは、あなたのデータでそれを試して、よりうまくいくかどうかを確認することです。

あなたのケースでは、正しい答えがあります:データベースで作業を行います。

データベース内のデータをフィルタリングするには(whereを使用)、2つの利点があります。まず、データベースからアプリケーションに送信されるデータの量を減らします。これはほぼ常に勝利です(ほとんどすべての行が返されない限り)。

第2に、利用可能な索引などを使用して問合せを最適化し、問合せを高速化できます。

1

個人的には、データベースから吸い込んだデータの量を減らすことができれば、それを実行します。なぜ100kが必要なのか10Mレコードをダウンロードするのはなぜですか?linqを使って簡単にローカル条件などを使って細かく整理しましょう。小さなデータの場合は、おそらく両方を試すことができます。とにかく、SQL ...

-2

ここでは、LinqToSqlここをクリックして、結果のクエリは同等です。その場合、パフォーマンスの点で唯一の違いはLinqToSql SQLクエリにC#表現ツリーを変換するオーバーヘッドです。そして、プロセスに反射とツリーを変換する複雑なロジックを使用しているDBプロバイダが関わっているので、それはかなり深刻です。

+0

彼は言う*すべてのデータを取得し、Linqクエリ*を使用して**そうではない** LinqToSQL – Liam

+0

プレーンADO.NETクエリからデータを取得するLinqを使用できますか? – UserControl

+0

はい。任意のデータセットでlinqを使用することもできます。 – Liam

関連する問題