0

我是 mongodb 的新手,我需要有关使用复合索引提高查询性能的帮助。

我正在使用“_id”字段进行分页。询问:

db.data.find( {"$or": [ { "cat": "5" }, {"cat": "6" } ] }, {"style": "3"}, 
              {"area": "London"}, {"_id": {"$lt": 103}).sort( { "_id": 1 } ).limit(30)

style并且area可以是可选的,因此这些也是可能的。

db.data.find( {"$or": [ { "cat": "5" }, {"cat": "6" } ] },  
              {"area": "London"}, {"_id": {"$lt": 103}).sort( { "_id": 1 } ).limit(30)

db.data.find( {"$or": [ { "cat": "5" }, {"cat": "6" } ] }, {"style": "3"}, 
              {"_id": {"$lt": 103}).sort( { "_id": 1 } ).limit(30)

db.data.find( {"$or": [ { "cat": "5" }, {"cat": "6" } ] }, 
              {"_id": {"$lt": 103}).sort( { "_id": 1 } ).limit(30)

这些查询是否可以使用此复合索引,还是我需要更多附加索引?

{ "cat": 1, "style": 1, "area": 1, "_id": 1 }

编辑

我不确定这些索引中的哪一个对查询有效。

{ "cat": 1, "style": 1, "area": 1, "_id": 1 } or
{ "_id": 1, "cat": 1, "style": 1, "area": 1 }

款式数量:16

区域数量:50

id数:1000万

4

1 回答 1

0

利用

{ "_id": 1, "cat": 1, "style": 1, "area": 1 }

ObjectId 具有以下结构:

0 1 2 3   | 4 5 6   | 7 8 | 9 10 11
Timestamp | Machine | PID | Increment

因为timestamp在上面的结构中排在第一位,它会按照大致的插入顺序进行排序。

当 id 在索引中排在第一位时,它将减少您的查找对象。

于 2014-12-02T08:04:22.020 回答