为什么MongoDB的索引不能像设置那样工作?

时间:2019-11-17 13:09:51

标签: database mongodb

我在MongoDB中建立索引有问题。我创建了这样的索引:

user_id_1_platform_1_type_1_alive_1

当我查询时,数据库的“慢速”日志返回此信息

  

2019-11-17T19:35:57.182 + 0700 I COMMAND [conn1428]命令   dev_store.users命令:getMore {getMore:27512324353,   集合:“设备”,batchSize:899,$ db:“ dev_store”}   originatingCommand:{查找:“设备”,过滤器:{user_id:{$ gt:72819   },平台:{$ gt:4},有效期:true},排序:{user_id:1},   投影:{user_id:1},限制:1000,$ db:“ dev_store”}   planSummary:IXSCAN {user_id:1,平台:1,类型:1,活动:1}   cursorid:27512324353 keysExamined:909 docsExamined:899   cursorExhausted:1 numYields:134 nreturned:899 reslen:32346锁:{   全局:{quirenCount:{r:270}},数据库:{acquisitionCount:{r:   135}},集合:{acquisitionCount:{r:135}}}协议:op_msg   3252ms

正如它在日志中显示的那样,我通过条件查询user_id的条件:user_id,platform和live。但是数据库仍然非常缓慢。

那么,当前的复合索引是什么问题,或者我在此步骤中做错了什么?谢谢!

更新:

我刚刚试图通过这样的查询写下一些执行状态

  

db.users.explain('executionStats')。find({user_id:{$ gt:2283572},platform:{$ gt:4},active:true})

结果是

 {
  "queryPlanner": {
    "plannerVersion": 1,
    "namespace": "dev_store.users",
    "indexFilterSet": false,
    "parsedQuery": {
      "$and": [
        {
          "alive": {
            "$eq": true
          }
        },
        {
          "platform": {
            "$gt": 4
          }
        },
        {
          "user_id": {
            "$gt": 2283572
          }
        }
      ]
    },
    "winningPlan": {
      "stage": "LIMIT",
      "limitAmount": 1000,
      "inputStage": {
        "stage": "FETCH",
        "inputStage": {
          "stage": "IXSCAN",
          "keyPattern": {
            "user_id": 1,
            "platform": 1,
            "alive": 1
          },
          "indexName": "user_id_1_platform_1_alive_1",
          "isMultiKey": false,
          "multiKeyPaths": {
            "user_id": [],
            "platform": [],
            "alive": []
          },
          "isUnique": false,
          "isSparse": false,
          "isPartial": false,
          "indexVersion": 2,
          "direction": "forward",
          "indexBounds": {
            "user_id": [
              "(2283572.0, inf.0]"
            ],
            "platform": [
              "(4.0, inf.0]"
            ],
            "alive": [
              "[true, true]"
            ]
          }
        }
      }
    },
    "rejectedPlans": [
      {
        "stage": "LIMIT",
        "limitAmount": 1000,
        "inputStage": {
          "stage": "FETCH",
          "filter": {
            "$and": [
              {
                "alive": {
                  "$eq": true
                }
              },
              {
                "user_id": {
                  "$gt": 2283572
                }
              }
            ]
          },
          "inputStage": {
            "stage": "IXSCAN",
            "keyPattern": {
              "platform": 1
            },
            "indexName": "platform_1",
            "isMultiKey": false,
            "multiKeyPaths": {
              "platform": []
            },
            "isUnique": false,
            "isSparse": false,
            "isPartial": false,
            "indexVersion": 2,
            "direction": "forward",
            "indexBounds": {
              "platform": [
                "(4.0, inf.0]"
              ]
            }
          }
        }
      }
    ]
  },
  "executionStats": {
    "executionSuccess": true,
    "nReturned": 1000,
    "executionTimeMillis": 21,
    "totalKeysExamined": 1014,
    "totalDocsExamined": 1000,
    "executionStages": {
      "stage": "LIMIT",
      "nReturned": 1000,
      "executionTimeMillisEstimate": 20,
      "works": 1015,
      "advanced": 1000,
      "needTime": 14,
      "needYield": 0,
      "saveState": 9,
      "restoreState": 9,
      "isEOF": 1,
      "invalidates": 0,
      "limitAmount": 1000,
      "inputStage": {
        "stage": "FETCH",
        "nReturned": 1000,
        "executionTimeMillisEstimate": 20,
        "works": 1014,
        "advanced": 1000,
        "needTime": 14,
        "needYield": 0,
        "saveState": 9,
        "restoreState": 9,
        "isEOF": 0,
        "invalidates": 0,
        "docsExamined": 1000,
        "alreadyHasObj": 0,
        "inputStage": {
          "stage": "IXSCAN",
          "nReturned": 1000,
          "executionTimeMillisEstimate": 0,
          "works": 1014,
          "advanced": 1000,
          "needTime": 14,
          "needYield": 0,
          "saveState": 9,
          "restoreState": 9,
          "isEOF": 0,
          "invalidates": 0,
          "keyPattern": {
            "user_id": 1,
            "platform": 1,
            "alive": 1
          },
          "indexName": "user_id_1_platform_1_alive_1",
          "isMultiKey": false,
          "multiKeyPaths": {
            "user_id": [],
            "platform": [],
            "alive": []
          },
          "isUnique": false,
          "isSparse": false,
          "isPartial": false,
          "indexVersion": 2,
          "direction": "forward",
          "indexBounds": {
            "user_id": [
              "(2283572.0, inf.0]"
            ],
            "platform": [
              "(4.0, inf.0]"
            ],
            "alive": [
              "[true, true]"
            ]
          },
          "keysExamined": 1014,
          "seeks": 15,
          "dupsTested": 0,
          "dupsDropped": 0,
          "seenInvalidated": 0
        }
      }
    }
  },
  "serverInfo": {
    "host":"Apps",
    "port": 27017,
    "version": "3.6.9"
  },
  "ok": 1
}

0 个答案:

没有答案