1,数据结构如下
"_id" : ObjectId("61c3cf02215baac3fdc00a71"),
"ST" : "31",
"CN" : "2011",
"PW" : "123456",
"MN" : "202101070000000000000002",
"w21003-Rtd" : "0.086",
"w21003-Flag" : "N",
"w21011-Rtd" : "0.196",
"w21011-Flag" : "N",
"w01018-Rtd" : "13.00",
"w01018-Flag" : "N",
"timestamp" : 1640222471
2,查询语句如下
db.getCollection('xxx').
find(
{'timestamp': {"$gte": 1639670400, "$lte": 1640275199}, 'MN': "202101070000000000000002", 'CN': "2011"}).
skip(0).limit(20)
执行计划如下
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "xxx",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"MN" : {
"$eq" : "202101070000000000000002"
}
},
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"winningPlan" : {
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"timestamp" : -1.0,
"MN" : 1.0,
"CN" : 1.0,
"log_key" : 1.0
},
"indexName" : "timestamp_-1_MN_1_CN_1_log_key_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"timestamp" : [],
"MN" : [],
"CN" : [],
"log_key" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"timestamp" : [
"[1640275199.0, 1639670400.0]"
],
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"log_key" : [
"[MinKey, MaxKey]"
]
}
}
}
},
"rejectedPlans" : [
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0
},
"indexName" : "MN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"QN" : 1.0
},
"indexName" : "MN_1_CN_1_QN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"QN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"QN" : [
"[MinKey, MaxKey]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"DataTime" : 1.0
},
"indexName" : "MN_1_CN_1_DataTime_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"DataTime" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"DataTime" : [
"[MinKey, MaxKey]"
]
}
}
}
}
]
}
"ok" : 1.0
}
executionStats 执行计划
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "xxxxx",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"MN" : {
"$eq" : "202101070000000000000002"
}
},
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"winningPlan" : {
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"timestamp" : -1.0,
"MN" : 1.0,
"CN" : 1.0,
"log_key" : 1.0
},
"indexName" : "timestamp_-1_MN_1_CN_1_log_key_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"timestamp" : [],
"MN" : [],
"CN" : [],
"log_key" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"timestamp" : [
"[1640275199.0, 1639670400.0]"
],
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"log_key" : [
"[MinKey, MaxKey]"
]
}
}
}
},
"rejectedPlans" : [
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0
},
"indexName" : "MN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"QN" : 1.0
},
"indexName" : "MN_1_CN_1_QN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"QN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"QN" : [
"[MinKey, MaxKey]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"timestamp" : {
"$lte" : 1640275199.0
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"DataTime" : 1.0
},
"indexName" : "MN_1_CN_1_DataTime_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"DataTime" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"DataTime" : [
"[MinKey, MaxKey]"
]
}
}
}
}
]
},
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 20,
"executionTimeMillis" : 182,
"totalKeysExamined" : 701,
"totalDocsExamined" : 20,
"executionStages" : {
"stage" : "LIMIT",
"nReturned" : 20,
"executionTimeMillisEstimate" : 12,
"works" : 702,
"advanced" : 20,
"needTime" : 681,
"needYield" : 0,
"saveState" : 23,
"restoreState" : 23,
"isEOF" : 1,
"invalidates" : 0,
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"nReturned" : 20,
"executionTimeMillisEstimate" : 12,
"works" : 701,
"advanced" : 20,
"needTime" : 681,
"needYield" : 0,
"saveState" : 23,
"restoreState" : 23,
"isEOF" : 0,
"invalidates" : 0,
"docsExamined" : 20,
"alreadyHasObj" : 0,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 20,
"executionTimeMillisEstimate" : 12,
"works" : 701,
"advanced" : 20,
"needTime" : 681,
"needYield" : 0,
"saveState" : 23,
"restoreState" : 23,
"isEOF" : 0,
"invalidates" : 0,
"keyPattern" : {
"timestamp" : -1.0,
"MN" : 1.0,
"CN" : 1.0,
"log_key" : 1.0
},
"indexName" : "timestamp_-1_MN_1_CN_1_log_key_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"timestamp" : [],
"MN" : [],
"CN" : [],
"log_key" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"timestamp" : [
"[1640275199.0, 1639670400.0]"
],
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"log_key" : [
"[MinKey, MaxKey]"
]
},
"keysExamined" : 701,
"seeks" : 682,
"dupsTested" : 0,
"dupsDropped" : 0,
"seenInvalidated" : 0
}
}
}
}
}
查询耗时5秒
3,更换查询语句如下
db.getCollection('xxxx').
find(
{'timestamp': {"$gte": 1639670400}, 'MN': "202101070000000000000002", 'CN': "2011"}).
skip(0).limit(20)
执行计划
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "xxxx",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"MN" : {
"$eq" : "202101070000000000000002"
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"winningPlan" : {
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"timestamp" : -1.0,
"MN" : 1.0,
"CN" : 1.0,
"log_key" : 1.0
},
"indexName" : "timestamp_-1_MN_1_CN_1_log_key_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"timestamp" : [],
"MN" : [],
"CN" : [],
"log_key" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"timestamp" : [
"[inf.0, 1639670400.0]"
],
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"log_key" : [
"[MinKey, MaxKey]"
]
}
}
}
},
"rejectedPlans" : [
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0
},
"indexName" : "MN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"timestamp" : {
"$gte" : 1639670400.0
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"QN" : 1.0
},
"indexName" : "MN_1_CN_1_QN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"QN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"QN" : [
"[MinKey, MaxKey]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"timestamp" : {
"$gte" : 1639670400.0
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"DataTime" : 1.0
},
"indexName" : "MN_1_CN_1_DataTime_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"DataTime" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"DataTime" : [
"[MinKey, MaxKey]"
]
}
}
}
}
]
},
}
executionStats 执行计划
/* 1 */
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "xxxxx",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"MN" : {
"$eq" : "202101070000000000000002"
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"winningPlan" : {
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"timestamp" : -1.0,
"MN" : 1.0,
"CN" : 1.0,
"log_key" : 1.0
},
"indexName" : "timestamp_-1_MN_1_CN_1_log_key_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"timestamp" : [],
"MN" : [],
"CN" : [],
"log_key" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"timestamp" : [
"[inf.0, 1639670400.0]"
],
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"log_key" : [
"[MinKey, MaxKey]"
]
}
}
}
},
"rejectedPlans" : [
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"CN" : {
"$eq" : "2011"
}
},
{
"timestamp" : {
"$gte" : 1639670400.0
}
}
]
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0
},
"indexName" : "MN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"timestamp" : {
"$gte" : 1639670400.0
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"QN" : 1.0
},
"indexName" : "MN_1_CN_1_QN_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"QN" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"QN" : [
"[MinKey, MaxKey]"
]
}
}
}
},
{
"stage" : "LIMIT",
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"timestamp" : {
"$gte" : 1639670400.0
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"MN" : 1.0,
"CN" : 1.0,
"DataTime" : 1.0
},
"indexName" : "MN_1_CN_1_DataTime_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"MN" : [],
"CN" : [],
"DataTime" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"DataTime" : [
"[MinKey, MaxKey]"
]
}
}
}
}
]
},
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 20,
"executionTimeMillis" : 9,
"totalKeysExamined" : 794,
"totalDocsExamined" : 20,
"executionStages" : {
"stage" : "LIMIT",
"nReturned" : 20,
"executionTimeMillisEstimate" : 0,
"works" : 795,
"advanced" : 20,
"needTime" : 774,
"needYield" : 0,
"saveState" : 24,
"restoreState" : 24,
"isEOF" : 1,
"invalidates" : 0,
"limitAmount" : 20,
"inputStage" : {
"stage" : "FETCH",
"nReturned" : 20,
"executionTimeMillisEstimate" : 0,
"works" : 794,
"advanced" : 20,
"needTime" : 774,
"needYield" : 0,
"saveState" : 24,
"restoreState" : 24,
"isEOF" : 0,
"invalidates" : 0,
"docsExamined" : 20,
"alreadyHasObj" : 0,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 20,
"executionTimeMillisEstimate" : 0,
"works" : 794,
"advanced" : 20,
"needTime" : 774,
"needYield" : 0,
"saveState" : 24,
"restoreState" : 24,
"isEOF" : 0,
"invalidates" : 0,
"keyPattern" : {
"timestamp" : -1.0,
"MN" : 1.0,
"CN" : 1.0,
"log_key" : 1.0
},
"indexName" : "timestamp_-1_MN_1_CN_1_log_key_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"timestamp" : [],
"MN" : [],
"CN" : [],
"log_key" : []
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"timestamp" : [
"[inf.0, 1639670400.0]"
],
"MN" : [
"[\"202101070000000000000002\", \"202101070000000000000002\"]"
],
"CN" : [
"[\"2011\", \"2011\"]"
],
"log_key" : [
"[MinKey, MaxKey]"
]
},
"keysExamined" : 794,
"seeks" : 775,
"dupsTested" : 0,
"dupsDropped" : 0,
"seenInvalidated" : 0
}
}
}
}
}
查询耗时:0.07秒
4,服务器内存消耗
MongoDB 版本 version v4.0.12