MongoDB c#驱动程序慢速查找索引

时间:2013-07-01 13:50:25

标签: mongodb mongodb-.net-driver

在字段“Base.UserID”上获得了5000多万个文档和非唯一索引 replicaset和连接字符串中的两个mongo服务器:

<add name="MongoConnectionString" connectionString="mongodb://mango1,mango2:27017" />

保险指数:

var eventCollection = Collection<EventMongo>();
eventCollection.EnsureIndex(IndexKeys.Ascending("Base.UserID"), IndexOptions.SetName("Event.Base.UserID"));

然后我找到了

                var _Set = new SortedSet<Int64>();
                using (var db = new BaseDataAccess())
                {
                    var col = db.Collection<EventMongo>();
                    var counter = 0;
                    var query = Query.And(
                        Query.EQ("Base.UserID", UserID),
                        Query.EQ("Base.Visible", 1)
                    );

                    var _docs = col.Find(query);
                    _docs.SetFields(new[] {"SQLId"});        
                    _docs.SetSortOrder(SortBy.Descending("SQLId"));
                    _docs.SetLimit(HowMany);

                    int i = 0;                       

                    foreach (var doc in _docs)
                    {   
                        var _EventID = doc.SQLId;
                        _Set.Add(_EventID);
                        if (++counter >= HowMany) break;
                    }
                }

                return _Set;

相同的文档包含一个并行的MS SQL数据库,我提到读取MongoDB的第一个查询比MS SQL需要更多的时间(最多5秒)! (同一个UserID的第二次点击更快)

2 个答案:

答案 0 :(得分:0)

您的索引未被使用。如果您通过“Base.UserID”和“Base.Visible”进行查询,则需要包含两个字段的复合索引。

答案 1 :(得分:0)

“scanAndOrder”:是的,如果可能的话,你希望这是假的。

我相信您可能希望将您的排序添加到索引中。

MongoBlog on Index Ordering

eventCollection.EnsureIndex(IndexKeys.Ascending("Base.UserID"), IndexKeys.Descending("SQLId"), IndexOptions.SetName("Event.Base.UserID"));