Mongodb db.collection.distinct () в aws documentdb не использует индекс - PullRequest
0 голосов
/ 16 февраля 2019

Переход на новый сервис AWS documentDB.В настоящее время на Монго 3.2.Когда я запускаю db.collection.distinct("FIELD_NAME"), он возвращает результаты очень быстро.Я сделал дамп базы данных в базу данных документов AWS (совместим с Mongo 3.6), и этот простой запрос просто завис.

Вот мой .explain () и индексы в рабочем экземпляре в сравнении с документом AWSdb:

Функция объяснения в рабочем экземпляре:

> db.collection.explain().distinct("FIELD_NAME")
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "db.collection",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "$and" : [ ]
                },
                "winningPlan" : {
                        "stage" : "PROJECTION",
                        "transformBy" : {
                                "_id" : 0,
                                "FIELD_NAME" : 1
                        },
                        "inputStage" : {
                                "stage" : "DISTINCT_SCAN",
                                "keyPattern" : {
                                        "FIELD_NAME" : 1
                                },
                                "indexName" : "FIELD_INDEX_NAME",
                                "isMultiKey" : false,
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 1,
                                "direction" : "forward",
                                "indexBounds" : {
                                        "FIELD_NAME" : [
                                                "[MinKey, MaxKey]"
                                        ]
                                }
                        }
                },
                "rejectedPlans" : [ ]
        },

Объяснение в AWS documentdb, а неworking:

rs0:PRIMARY> db.collection.explain().distinct("FIELD_NAME")
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "db.collection",
                "winningPlan" : {
                        "stage" : "AGGREGATE",
                        "inputStage" : {
                                "stage" : "HASH_AGGREGATE",
                                "inputStage" : {
                                        "stage" : "COLLSCAN"
                                }
                        }
                }
        },
}

Индекс для обоих этих экземпляров:

        {
                "v" : 1,
                "key" : {
                        "FIELD_NAME" : 1
                },
                "name" : "FIELD_INDEX_NAME",
                "ns" : "db.collection"
        }

Кроме того, в этой базе данных есть пара миллионов документов, но для этого "FIELD_NAME" имеется только около 20 различных значений.Любая помощь будет оценена.

Я попробовал это с .hint ("index_name"), и это не сработало.Я попытался очистить кэш плана, но получаю Feature not supported: planCacheClear

1 Ответ

0 голосов
/ 24 апреля 2019

COLLSCAN и IXSCAN не имеют большой разницы в этом случае, оба должны сканировать все документы или записи индекса.

...