我尝试在带有索引的列上用C#定时Mongo查询:
DateTime startTime = DateTime.Now;
MongoCollection<BsonDocument> voteCol = database.GetCollection<BsonDocument>("XXX");
var query = new QueryDocument("YYY", "23915");
MongoCursor<BsonDocument> cursor = voteCol.Find(query).SetSortOrder(SortBy.Descending("ZZZ")).SetLimit(10).SetSkip(20);
TimeSpan elapsedTime = DateTime.Now - startTime;
Console.WriteLine("Elapsed: {0}, in seconds: {1}, in milliseconds: {2} ",
elapsedTime, elapsedTime.TotalSeconds, elapsedTime.TotalMilliseconds, cursor.Count());
每次它等于0,我得到结果。 这是否意味着它太快或者我错过了什么?
答案 0 :(得分:4)
这是因为你实际上没有从mongodb加载数据。当您开始遍历MongoCursor
时,将加载数据。您可以轻松使用ToList
方法从数据库加载数据:
var data = voteCol.Find(query)
.SetSortOrder(SortBy.Descending("ZZZ"))
.SetLimit(10)
.SetSkip(20)
.ToList();
我还建议使用Stopwatch来评估已用时间。
答案 1 :(得分:0)
答案 2 :(得分:0)
就像Andrew说的那样,Mongo实际上并没有执行查询,直到你开始迭代游标,所以你的查询没有被执行。
Stopwatch
类可能是从应用程序计算查询的最佳方式,但您也可以使用MongoDB Database Profiler在数据库中对查询进行基准测试。