У меня есть агрегирование mon go с несколькими этапами, и часть этапа $match
представляет собой операцию geoWithin
по большому набору точек.
Я анализировал агрегирование, используя объяснение с ExecutionStats и заметил, что статистика выполнения выигрышного плана имела каждый этап с очень низким executionTimeMillisEstimate
, но в целом executionTimeMillis
было огромным. Я говорю о ~ 150-кратной разнице.
Я заметил, что queryPlanner имеет отклоненный план с запросом, использующим все второстепенные индексы, а не только индекс местоположения для geoWithin, который используется в выигрышном плане. Но поскольку выигрышный план кэшируется, я не думал, что это должно иметь большое значение.
Но опять же разница между ч / б Время слишком велика, чтобы быть только из-за отклоненного построения плана, в чем еще может быть причина для этого?
План выполнения:
{
"executionSuccess": true,
"nReturned": 101,
"executionTimeMillis": 85264,
"totalKeysExamined": 196,
"totalDocsExamined": 315,
"executionStages": {
"stage": "FETCH",
"filter": {
"$and": [{
"something": {
"$eq": "a"
}
},
{
"other": {
"$eq": "abc"
}
}
]
},
"nReturned": 101,
"executionTimeMillisEstimate": 312,
"works": 196,
"advanced": 101,
"needTime": 95,
"needYield": 0,
"saveState": 88,
"restoreState": 88,
"isEOF": 0,
"docsExamined": 150,
"alreadyHasObj": 150,
"inputStage": {
"stage": "FETCH",
"filter": {
"$or": [{
"location": {
"$geoWithin": {
"$centerSphere": [
[
0,
1
],
0.0000783927971443699
]
}
}
},
{},
{}
]
},
"nReturned": 150,
"executionTimeMillisEstimate": 312,
"works": 196,
"advanced": 150,
"needTime": 46,
"needYield": 0,
"saveState": 88,
"restoreState": 88,
"isEOF": 0,
"docsExamined": 165,
"alreadyHasObj": 0,
"inputStage": {
"stage": "IXSCAN",
"nReturned": 165,
"executionTimeMillisEstimate": 0,
"works": 196,
"advanced": 165,
"needTime": 31,
"needYield": 0,
"saveState": 88,
"restoreState": 88,
"isEOF": 0,
"keyPattern": {
"location": "2dsphere"
},
"indexName": "location",
"isMultiKey": false,
"multiKeyPaths": {
"location": []
},
"isUnique": false,
"isSparse": false,
"isPartial": false,
"indexVersion": 2,
"direction": "forward",
"indexBounds": {
"location": [
"[0, 1]",
""
]
},
"keysExamined": 196,
"seeks": 32,
"dupsTested": 0,
"dupsDropped": 0
}
}
}
}