0

在“Base.UserID”字段上获得了 50+ 百万个文档和非唯一索引副本集和连接字符串中的两个 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的第二次命中速度更快)

4

2 回答 2

0

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

于 2013-07-01T18:01:36.023 回答
0

"scanAndOrder" :是的,如果可能的话,你希望它是假的。

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

MongoBlog 关于索引排序

eventCollection.EnsureIndex(IndexKeys.Ascending("Base.UserID"), IndexKeys.Descending("SQLId"), IndexOptions.SetName("Event.Base.UserID"));
于 2014-04-03T20:17:02.150 回答