MongoDB使用日期查询性能

时间:2016-09-19 15:09:10

标签: mongodb-query mongodb-indexes

我有一个包含以下字段的文档的MongoDb集合:

{ 
    "_id" : ObjectId("57a3276fcc36bd0100504a95"), 
    "employeeId" : "5698f1a65d79d07f19ec0ee4", 
    "isoDate" : ISODate("2016-01-31T23:00:00.000+0000"), 
}

查询如下所示:

{ isoDate: {
        $gte: new Date("2016-01-30T23:00:00.000+0000"),
        $lte: new Date("2016-01-31T23:00:00.000+0000")
      },
  employeeId: "5698f1a65d79d07f19ec0ee4"
}

当集合中有大约5000个条目时,这个查询在带有SSD的8个Core / 8GB VM中大约需要300ms,这看起来很慢(结果包含大约3到6个文档)。

创建包含employeeIdisoDate的索引似乎无法提高效果。

MongoDB版本是3.2。

更新 explain()的输出如下所示:

{
  "queryPlanner": {
    "plannerVersion": 1,
    "namespace": "calendarentries",
    "indexFilterSet": false,
    "parsedQuery": {
      "$and": [
        {
          "employeeId": {
            "$eq": "5698f1a65d79d07f19ec0ee4"
          }
        },
        {
          "isoDate": {
            "$lte": {
              "$date": "2016-02-10T23:00:00.000+0000"
            }
          }
        },
        {
          "isoDate": {
            "$gte": {
              "$date": "2016-01-30T23:00:00.000+0000"
            }
          }
        }
      ]
    },
    "winningPlan": {
      "stage": "FETCH",
      "inputStage": {
        "stage": "IXSCAN",
        "keyPattern": {
          "isoDate": 1,
          "employeeId": 1
        },
        "indexName": "calendarquery",
        "isMultiKey": false,
        "isUnique": false,
        "isSparse": false,
        "isPartial": false,
        "indexVersion": 1,
        "direction": "forward",
        "indexBounds": {
          "isoDate": [
            "[new Date(1454194800000), new Date(1455145200000)]"
          ],
          "employeeId": [
            "[\"5698f1a65d79d07f19ec0ee4\", \"5698f1a65d79d07f19ec0ee4\"]"
          ]
        }
      }
    },
    "rejectedPlans": []
  },
  "executionStats": {
    "executionSuccess": true,
    "nReturned": 18,
    "executionTimeMillis": 0,
    "totalKeysExamined": 37,
    "totalDocsExamined": 18,
    "executionStages": {
      "stage": "FETCH",
      "nReturned": 18,
      "executionTimeMillisEstimate": 0,
      "works": 37,
      "advanced": 18,
      "needTime": 18,
      "needYield": 0,
      "saveState": 0,
      "restoreState": 0,
      "isEOF": 1,
      "invalidates": 0,
      "docsExamined": 18,
      "alreadyHasObj": 0,
      "inputStage": {
        "stage": "IXSCAN",
        "nReturned": 18,
        "executionTimeMillisEstimate": 0,
        "works": 37,
        "advanced": 18,
        "needTime": 18,
        "needYield": 0,
        "saveState": 0,
        "restoreState": 0,
        "isEOF": 1,
        "invalidates": 0,
        "keyPattern": {
          "isoDate": 1,
          "employeeId": 1
        },
        "indexName": "calendarquery",
        "isMultiKey": false,
        "isUnique": false,
        "isSparse": false,
        "isPartial": false,
        "indexVersion": 1,
        "direction": "forward",
        "indexBounds": {
          "isoDate": [
            "[new Date(1454194800000), new Date(1455145200000)]"
          ],
          "employeeId": [
            "[\"5698f1a65d79d07f19ec0ee4\", \"5698f1a65d79d07f19ec0ee4\"]"
          ]
        },
        "keysExamined": 37,
        "dupsTested": 0,
        "dupsDropped": 0,
        "seenInvalidated": 0
      }
    },
    "allPlansExecution": []
  },
  "serverInfo": {
    "host": "f9e2110ba93e",
    "port": 27017,
    "version": "3.2.4",
    "gitVersion": "e2ee9ffcf9f5a94fad76802e28cc978718bb7a30"
  },
  "ok": 1
}

0 个答案:

没有答案