MongoDB索引和排序慢

时间:2018-11-13 15:54:29

标签: 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") }
}

它运作良好且快速。现在,我要对结果进行排序:{ "changeset.when" : -1 },它会减慢很多速度。从几百毫秒到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)"
                    ]
                }
            }
        }
    }
}

为什么这么慢?说明显示它成功使用了所需的索引,并且字段changeset.when降序排列。

1 个答案:

答案 0 :(得分:1)

如果您有复合索引,请尝试创建查询键序列,例如索引序列。它将带来更多性能。

您无需对结果进行其他排序,默认情况下,结果将根据索引进行排序(在您的情况下,结果将按changeset.when降序排序)

有关更多信息,请共享您收藏中的一些文档。

如果您有任何疑问,请随时提问