MongoDB具有索引和排序功能
我有复合索引:MongoDB具有索引和排序功能,mongodb,indexing,Mongodb,Indexing,我有复合索引: { "hidden" : 1, "country" : 1, "edited" : 1, "changeset.when" : -1 } 和查询: { "country" : "ua", "edited" : true, "hidden" : false, "changeset.when" : { "$lt" : ISODate("5138-11-16T09:46:40Z") } } 它工作得又好又快。现在我想按
{
"hidden" : 1,
"country" : 1,
"edited" : 1,
"changeset.when" : -1
}
和查询:
{
"country" : "ua",
"edited" : true,
"hidden" : false,
"changeset.when" : { "$lt" : ISODate("5138-11-16T09:46:40Z") }
}
它工作得又好又快。现在我想按以下方式对结果进行排序:{“changeset.when”:-1}
,速度会慢很多。从100毫秒到15秒
下面是关于排序查询的说明:
"winningPlan" : {
"stage" : "SORT",
"sortPattern" : {
"changeset.when" : -1
},
"limitAmount" : 15,
"inputStage" : {
"stage" : "SORT_KEY_GENERATOR",
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"hidden" : 1,
"country" : 1,
"edited" : 1,
"changeset.when" : -1
},
"indexName" : "edited_news",
"isMultiKey" : true,
"multiKeyPaths" : {
"hidden" : [ ],
"country" : [ ],
"edited" : [ ],
"changeset.when" : [
"changeset"
]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"hidden" : [
"[false, false]"
],
"country" : [
"[\"ua\", \"ua\"]"
],
"edited" : [
"[true, true]"
],
"changeset.when" : [
"(new Date(100000000000000), true)"
]
}
}
}
}
}
为什么这么慢?Explain显示它成功地使用了所需的索引和字段
变更集 如果您有复合索引,请尝试创建与索引Sequencence类似的查询键序列。它将带来更多的性能
您不需要对结果进行传统排序,默认情况下,结果将根据索引进行排序(在您的情况下,结果将按变更集降序排序。当
)
有关更多信息,请共享您收藏的一些文档
如果您有任何问题,请随时询问尝试将变更集作为索引中的第一个条目或在该字段上创建单键索引。。看见