Управление индексами с MongoDB - PullRequest
0 голосов
/ 16 октября 2019

У меня есть несколько вопросов о том, как mongoDb выбирает индекс, который будет более эффективным для получения данных.

У меня есть следующий запрос:

db.getCollection('myCollection').find({
    "TenantId":"1a1a1a1a",
    "ContractId": 1111,
    "Lists":1111,
    "Email":{"$exists":true,"$nin":["",null]},
    "Optouts.Media":{"$nin":["EMAIL",null]},
    "Deleted":false
})

Этот запрос используется вmapReduce, который не удалось. Когда я запускаю его с count(), я получу результат 290000 за 47 с.

Итак, чтобы понять, что происходит, я снова выполняю запрос в режиме объяснения. И действительно, используемый индекс, похоже, не самый лучший (TenantId_1_ContractId_1_GUID_1_Deleted_1).

Я повторяю тот же запрос с hint(TenantId_1_ContractId_1_Lists_1_Deleted_1), и на этот раз я получу результат через 2 с.

Как Монго выберет индекс для получения данных?

Полезно знать:

  • Для текущего контракта у меня 1,6 миллиона записей.
  • При фильтрации по спискам у меня 700 000 записей
  • В документах списки - это массив значений

Мне нужно получить индекс planExecution, чтобы попытаться получить больше информации, но я не могу понять. См. Ниже результат explain('allPlansExecution').

{
    "queryPlanner" : {
        "mongosPlannerVersion" : 1,
        "winningPlan" : {
            "stage" : "SINGLE_SHARD",
            "shards" : [ 
                {
                    "shardName" : "rs1",
                    "connectionString" : "...",
                    "serverInfo" : {...},
                    "plannerVersion" : 1,
                    "namespace" : "",
                    "indexFilterSet" : false,
                    "parsedQuery" : {...},
                    "winningPlan" : {
                        "stage" : "FETCH",
                        "filter" : {...},
                        "inputStage" : {
                            "stage" : "IXSCAN",
                            "keyPattern" : {
                                "TenantId" : 1.0,
                                "ContractId" : 1.0,
                                "GUID" : 1.0,
                                "Deleted" : 1.0
                            },
                            "indexName" : "TenantId_1_ContractId_1_GUID_1_Deleted_1",
                            "isMultiKey" : false,
                            "multiKeyPaths" : {
                                "TenantId" : [],
                                "ContractId" : [],
                                "GUID" : [],
                                "Deleted" : []
                            },
                            "isUnique" : false,
                            "isSparse" : false,
                            "isPartial" : false,
                            "indexVersion" : 2,
                            "direction" : "forward",
                            "indexBounds" : {...}
                        }
                    },
                    "rejectedPlans" : [ 
                        {
                            "stage" : "FETCH",
                            "filter" : {...},
                            "inputStage" : {
                                "stage" : "IXSCAN",
                                "keyPattern" : {
                                    "TenantId" : 1.0,
                                    "ContractId" : 1.0,
                                    "Lists" : 1.0,
                                    "Deleted" : 1.0
                                },
                                "indexName" : "TenantId_1_ContractId_1_Lists_1_Deleted_1",
                                "isMultiKey" : true,
                                "multiKeyPaths" : {
                                    "TenantId" : [],
                                    "ContractId" : [],
                                    "Lists" : [ 
                                        "Lists"
                                    ],
                                    "Deleted" : []
                                },
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "forward",
                                "indexBounds" : {...}
                            }
                        }, 
                        {...}
                    ]
                }
            ]
        }
    },
    "executionStats" : {...},
        "allPlansExecution" : [ 
            undefined, 
            {
                "shardName" : "rs1",
                "allPlans" : [ 
                    {
                        "nReturned" : 0,
                        "executionTimeMillisEstimate" : 51,
                        "totalKeysExamined" : 10618,
                        "totalDocsExamined" : 10618,
                        "executionStages" : {
                            "stage" : "FETCH",
                            "filter" : {...},
                            "nReturned" : 0,
                            "executionTimeMillisEstimate" : 51,
                            "works" : 10618,
                            "advanced" : 0,
                            "needTime" : 10618,
                            "needYield" : 0,
                            "saveState" : 664,
                            "restoreState" : 664,
                            "isEOF" : 0,
                            "invalidates" : 0,
                            "docsExamined" : 10618,
                            "alreadyHasObj" : 0,
                            "inputStage" : {
                                "stage" : "IXSCAN",
                                "nReturned" : 10618,
                                "executionTimeMillisEstimate" : 20,
                                "works" : 10618,
                                "advanced" : 10618,
                                "needTime" : 0,
                                "needYield" : 0,
                                "saveState" : 664,
                                "restoreState" : 664,
                                "isEOF" : 0,
                                "invalidates" : 0,
                                "keyPattern" : {
                                    "TenantId" : 1.0,
                                    "ContractId" : 1.0,
                                    "Lists" : 1.0,
                                    "Deleted" : 1.0
                                },
                                "indexName" : "TenantId_1_ContractId_1_Lists_1_Deleted_1",
                                "isMultiKey" : true,
                                "multiKeyPaths" : {
                                    "TenantId" : [],
                                    "ContractId" : [],
                                    "Lists" : [ 
                                        "Lists"
                                    ],
                                    "Deleted" : []
                                },
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "forward",
                                "indexBounds" : {...},
                                "keysExamined" : 10618,
                                "seeks" : 1,
                                "dupsTested" : 10618,
                                "dupsDropped" : 0,
                                "seenInvalidated" : 0
                            }
                        }
                    }, 
                    {
                        "nReturned" : 101,
                        "executionTimeMillisEstimate" : 0,
                        "totalKeysExamined" : 10618,
                        "totalDocsExamined" : 10616,
                        "executionStages" : {
                            "stage" : "FETCH",
                            "filter" : {...},
                            "nReturned" : 101,
                            "executionTimeMillisEstimate" : 0,
                            "works" : 10618,
                            "advanced" : 101,
                            "needTime" : 10517,
                            "needYield" : 0,
                            "saveState" : 664,
                            "restoreState" : 664,
                            "isEOF" : 0,
                            "invalidates" : 0,
                            "docsExamined" : 10616,
                            "alreadyHasObj" : 0,
                            "inputStage" : {
                                "stage" : "IXSCAN",
                                "nReturned" : 10616,
                                "executionTimeMillisEstimate" : 0,
                                "works" : 10618,
                                "advanced" : 10616,
                                "needTime" : 2,
                                "needYield" : 0,
                                "saveState" : 664,
                                "restoreState" : 664,
                                "isEOF" : 0,
                                "invalidates" : 0,
                                "keyPattern" : {
                                    "TenantId" : 1.0,
                                    "ContractId" : 1.0,
                                    "GUID" : 1.0,
                                    "Deleted" : 1.0
                                },
                                "indexName" : "TenantId_1_ContractId_1_GUID_1_Deleted_1",
                                "isMultiKey" : false,
                                "multiKeyPaths" : {
                                    "TenantId" : [],
                                    "ContractId" : [],
                                    "GUID" : [],
                                    "Deleted" : []
                                },
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "forward",
                                "indexBounds" : {...},
                                "keysExamined" : 10618,
                                "seeks" : 3,
                                "dupsTested" : 0,
                                "dupsDropped" : 0,
                                "seenInvalidated" : 0
                            }
                        }
                    }
                ]
            }
        ]
    }
}

Я удалил несколько строк {...}, если вы хотите получить более подробную информацию, не стесняйтесь спрашивать меня.

Большое спасибо заваша помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...