MongoDB在排序阶段不使用复合索引
我有一个集合,并指定了一个复合索引。索引用于过滤,但是排序是在内存中完成的,我不知道为什么 我有以下文件:MongoDB在排序阶段不使用复合索引,mongodb,indexing,Mongodb,Indexing,我有一个集合,并指定了一个复合索引。索引用于过滤,但是排序是在内存中完成的,我不知道为什么 我有以下文件: { _id :1, accountId: 1234566, positionId: 9090, eventDateTime: "2021-01-02T09:38:45", nonce: 1415, event: { symbol: "value1" } } 我使用的索引是 db.data.createIndex({
{ _id :1,
accountId: 1234566,
positionId: 9090,
eventDateTime: "2021-01-02T09:38:45",
nonce: 1415,
event: {
symbol: "value1"
}
}
我使用的索引是
db.data.createIndex({"accountId" : 1, "positionId" : 1, "event.symbol" : 1, eventDateTime: -1, "nonce": -1})
我的问题是
db.data.find({"accountId" : 123456, "positionId" : 9090, "event.symbol": { $in :["value1" , "value2", "value3"]}).sort({"eventDateTime" :-1, "nonce": -1})
使用explain后,我得到以下计划(缩写):
对我来说,奇怪的是,如果使用索引:
db.data.createIndex({"accountId" : 1, "positionId" : 1, eventDateTime: -1, "nonce": -1})
在同一查询中,不会在内存中执行排序。
我很难理解发生了什么以及第一个索引不起作用的原因。任何帮助都将不胜感激
之后,我还将索引更改为
db.data.createIndex({"accountId" : 1, "positionId" : 1, eventDateTime: -1, "nonce": -1, "event.symbol" : 1,})
为了匹配ESR建议,排序也在内存中执行这是否回答了您的问题?在解释的计划部分中,它显示了“多键路径”的哪些内容?请参阅本文,并讨论了如何将复合索引与筛选器+排序查询结合使用:
db.data.createIndex({"accountId" : 1, "positionId" : 1, eventDateTime: -1, "nonce": -1, "event.symbol" : 1,})