我有一个复合索引
{ userID:1, connectionStatus: 1, userTargetLastName: 1})
我想支持两个查询:
UserConnection.find( { $and : [ { userID : req.decoded.id }, { connectionStatus : 'accepted' } ] })
.sort({'_id': -1}).exec()
和
UserConnection.find( { $and : [ { userID : req.decoded.id }, { connectionStatus : 'accepted' } ] })
.sort({'userTargetLastName': 1}).exec()
我是否需要第二种化合物索引按_id进行排序,还是"内置"到我的化合物索引中?(根据MongoDB文档,我的化合物索引还应支持用户ID:1,ConnectionStatus:1查询(但是我可以按哪些订单进行排序??
{ userID:1, connectionStatus: 1, created: -1})
您仅在userID
和connectionStatus
上查询,因此您的化合物索引无需包括userTargetLastName
。这些排序在查询的结果上完成,并且在排序字段上具有索引并不重要,因此在索引中包含_id
并不重要。
检查索引使用的最佳方法是将explain()
函数与查询使用。这将告诉您有关使用哪个索引的很多信息,以及它的效率(扫描的文档数量等)。