随着记录数量的增加,Mongo DB变得缓慢

时间:2018-01-31 05:56:05

标签: database mongodb nosql aggregation-framework

我们使用mongo并且它在测试服务器上运行良好(我认为由于记录数量较少)但是当我们转向生产时它变得很慢。即使是简单的查询也需要大约10倍的时间。

我也检查了索引,已经定义了正确的索引。

查询

       db.products.aggregate([{
       "$match": {
           "tenant_id": 1031
       }
   }, {
       "$sort": {
           "id": -1
       }
   }, {
       "$skip": 0
   }, {
       "$limit": 20
   }]
) 

解释结果

// collection: products
{
    "waitedMS" : NumberLong("0"),
    "stages" : [
        {
            "$cursor" : {
                "query" : {
                    "tenant_id" : 1031
                },
                "sort" : {
                    "id" : NumberInt("-1")
                },
                "limit" : NumberLong("20"),
                "queryPlanner" : {
                    "plannerVersion" : NumberInt("1"),
                    "namespace" : "dbname.products",
                    "indexFilterSet" : false,
                    "parsedQuery" : {
                        "tenant_id" : {
                            "$eq" : 1031
                        }
                    },
                    "winningPlan" : {
                        "stage" : "FETCH",
                        "filter" : {
                            "tenant_id" : {
                                "$eq" : 1031
                            }
                        },
                        "inputStage" : {
                            "stage" : "IXSCAN",
                            "keyPattern" : {
                                "id" : NumberInt("-1")
                            },
                            "indexName" : "id",
                            "isMultiKey" : false,
                            "isUnique" : false,
                            "isSparse" : false,
                            "isPartial" : false,
                            "indexVersion" : NumberInt("1"),
                            "direction" : "forward",
                            "indexBounds" : {
                                "id" : [
                                    "[MaxKey, MinKey]"
                                ]
                            }
                        }
                    },
                    "rejectedPlans" : [ ]
                }
            }
        }
    ],
    "ok" : 1
}

请让我知道我能做些什么让它快速

1 个答案:

答案 0 :(得分:0)

要正确支持此查询,您需要{tenant_id: 1, id: -1}上的复合索引。第一部分帮助过滤,第二部分 - 快速排序过滤结果。

一些文档:https://docs.mongodb.com/manual/core/index-compound/#sort-order