// 索引在 comId, 和 loginTime 上都有但对的索引
find // db.collontion.find({comId: “734f496571394931696b”}).skip(1200).limit(10).sort({loginTime: 1 })
aggregate // db.collection.aggregate( [{ $match: { comId: “734f496571394931696b”} }, { $sort: { loginTime: 1 } }, { $skip: 1200}, { $limit: 10 }] )
- find查询走comId索引, 数据量少 ,耗时很小
- aggregate走loginTime 全索引扫描加全文档检查。耗时非常长
db.colloction.aggregate( [{ $match: { comId: “734f496571394931696b”, abnormal: 1} }, { $sort: { loginTime: -1 } }, { $skip: 0 }, { $limit: 10 }] , {explain: true})
/* 1 */
{
“stages” : [
{
“$cursor” : {
“query” : {
“comId” : “734f496571394931696b”,
“abnormal” : 1.0
},
“sort” : {
“loginTime” : -1
},
“limit” : NumberLong(1910),
“queryPlanner” : {
“plannerVersion” : 1,
“namespace” : “cmcc_20210729.cmcc_detect_abnormallogin”,
“indexFilterSet” : false,
“parsedQuery” : {
“$and” : [
{
“abnormal” : {
“$eq” : 1.0
}
},
{
“comId” : {
“$eq” : “734f496571394931696b”
}
}
]
},
“queryHash” : “E4B351FC”,
“planCacheKey” : “59752D0F”,
“winningPlan” : {
“stage” : “FETCH”,
“filter” : {
“$and” : [
{
“abnormal” : {
“$eq” : 1.0
}
},
{
“comId” : {
“$eq” : “734f496571394931696b”
}
}
]
},
“inputStage” : {
“stage” : “IXSCAN”,
“keyPattern” : {
“loginTime” : 1
},
“indexName” : “loginTime”,
“isMultiKey” : false,
“multiKeyPaths” : {
“loginTime” : []
},
“isUnique” : false,
“isSparse” : false,
“isPartial” : false,
“indexVersion” : 2,
“direction” : “backward”,
“indexBounds” : {
“loginTime” : [
“[MaxKey, MinKey]”
]
}
}
},
“rejectedPlans” : []
}
}
},
{
“$skip” : NumberLong(1900)
}
],
“serverInfo” : {
“host” : “wenqiang.wang-suyan-lts.novalocal”,
“port” : 27017,
“version” : “4.2.3”,
“gitVersion” : “6874650b362138df74be53d366bbefc321ea32d4”
},
“ok” : 1.0
}
根据你这个执行计划,skip不同,采用索引不同。你find里面对不同skip看下执行计划
根据你这个执行计划,skip不同,执行计划不同。