質問: filterValue1 ``` 225639行で125ミリ秒かかります。 なぜそんなに遅いのですか?私は2つの異なるボックスをテストしました。 もちろん、彼らは明らかに、sometingを変更する必要がありますか?
回答: 正確に何をしたいか、多くの行をフィルタリングすることが重要である理由については説明していません。あなたのデータベースがあなたのために集計を事前に計算することができる場合、1M行をフィルタリングして集計を取得することがどれほど速くなければならないのですか?いずれにしても、あなたは仕事に間違ったツールを使用しているようです。 *On one hand*, 1M rows is a small number of rows for most databases. As long as you have the proper indexes, querying shouldn't be a big problem. I suspect that either you do not have indexes on your query columns or you want to perform ad-hoc queries on non-indexed columns. さらに、データスキーマが間違っている場合は、どのデータベースを使用しても問題ありません。分析アプリケーションでは、通常、スタースキーマを使用して、記述するよりもはるかに多くのデータをより高速に照会できます。 分析目的で使用されるすべてのデータベースは、データを好きな形に変換する必要がある特殊なデータ構造を使用します。 典型的なリレーショナルデータベースでは、集計を事前に計算するためにキューブと結合されたスタースキーマを作成する必要があります。 列データベースは、通常、高速の分析クエリを実現するために圧縮と組み合わせた列形式でデータを格納しますが、多くの人が慣れ親しんでいるSQL言語とは大きく異なる可能性がある独自の言語でクエリを学習する必要があります。 *On the other hand*, the way you query (LINQ or DataTable.Select or whatever) has minimal effect on performance. Picking the proper data structure is much more important. For instance, using a Dictionary<> is much faster than using any of the techniques you mentioned. A dictionary essentially checks for single values in memory. Executing DataTable.Select without indexes, using LINQ to Datasets or to Objects is essentially the same as scanning all entries of an array or a List<> for a specific value,because that is what all these methods do - scan an entire list sequentially. さまざまなLINQプロバイダは、データベースの仕事をしません。彼らはあなたの質問を最適化しません。彼らは実行するように指示した内容を実行します。並べ替えられたリストでバイナリ検索を行っても、一般的なLINQプロバイダを使用するよりも高速です。 あなたが何をする必要があるかによって、試してみることができるさまざまなものがあります: * データを素早く切り抜く方法をお探しの場合は、Excel 2010のPowerPivot機能などの既存製品を使用してください。PowerPivotは、数百万行をメモリ内の列形式でロードおよび圧縮し、データをピボットテーブルと同じように扱い、他のメモリソースとの結合を定義することさえできます。 * より反復可能なプロセスが必要な場合は、リレーショナルデータベースに適切なスタースキーマを作成するか、カラムデータベースを使用します。どちらの場合でも、データを適切な構造にロードするためにスクリプトを記述する必要があります。 独自のアプリケーションを作成する場合は、他の類似ツールで使用されているさまざまなアルゴリズムや構造を、