我在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
}