私は1億のレコードを持つデータベーステーブルを持っています。 Screen Shot is taken from Robomongo大きなdatadasesでC#mongodbクエリを最適化する方法は?
テーブルスキーマ:There are 100 million records
私は、次のコードを実行します。結果は出ますが、完成には約1分かかります。結果をより速く得るためにクエリを最適化する必要があります。今まで私がやったことはここにあります。最適化された結果を達成する方法を教えてください。入れアウト
var collection = _database.GetCollection<BsonDocument>("FloatTable1");
var sw = Stopwatch.StartNew();
var builder = Builders<BsonDocument>.Filter;
int min = Convert.ToInt32(textBox13.Text); //3
int max = Convert.ToInt32(textBox14.Text); //150
var filt = builder.Gt("Value", min) & builder.Lt("Value", max);
var list = collection.Find(filt);
sw.Stop();
TimeSpan time = sw.Elapsed;
Console.WriteLine("Time to Fetch Record: " + time.ToString());
var sw1 = Stopwatch.StartNew();
var list1 = list.ToList();
sw1.Stop();
TimeSpan time1 = sw1.Elapsed;
Console.WriteLine("Time to Convert var to List: " + time1.ToString());
Console.WriteLine("Total Count in List: " + list1.Count.ToString());
です:レコードをフェッチするために
- 時間:00:00リストにVARを変換する00.0059207
- 時間:01:00:00.7209163
- リストの合計数: 1003154
私は与えられたコードに関連する質問はほとんどありません。
- ラインコレクション.Find(filt)を実行すると、フィルタリングされたレコードをデータベースからフェッチするか、フィルタを作成するだけですか?
- var list1 = list.ToList();実行するのに1分かかりますが、それはvarからリストに変換するだけですか?最初に変換するよりもデータを取得していますか?
- このクエリをどのように達成し、結果として可能な限り時間がかかるか。助けてください。
ありがとう。値の列にインデックスを作成してみましたが、それは役に立ちませんでした。ソリューションに向かう他の方法? – Umer