Mongodb db.collection.distinct() в aws documentdb не использует индекс
Переход на новый сервис AWS documentDB. В настоящее время на Монго 3.2. Когда я бегу db.collection.distinct("FIELD_NAME")
он возвращает результаты очень быстро. Я сделал дамп базы данных в базу данных документов AWS (совместим с Mongo 3.6), и этот простой запрос просто завис.
Вот мой.explain() и индексы в рабочем экземпляре по сравнению с AWS documentdb:
Функция объяснения на рабочем экземпляре:
> 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, не работает:
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
0 ответов
В этом случае COLLSCAN и IXSCAN не имеют большой разницы, оба должны сканировать все документы или записи индекса.