У меня есть коллекция MongoDB, которая содержит около 100 миллионов документов.
Документы в основном выглядят так:
_id : ObjectId("asd1234567890")
_reference_1_id : ObjectId("fgh4567890123")
_reference_2_id : ObjectId("jkl7890123456")
name : "Test1"
id : "4815162342"
created_time : Date( 1331882436000 )
_contexts : ["context1", "context2"]
...
Есть несколько установленных индексов, вот вывод db.mycoll.getIndexes ();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydb.mycoll",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"_reference_1_id" : 1,
"_reference_2_id" : 1,
"id" : 1
},
"unique" : true,
"ns" : "mydb.mycoll",
"name" : "_reference_1_id_1__reference_2_id_1_id_1"
},
{
"v" : 1,
"key" : {
"_reference_1_id" : 1,
"_reference_2_id" : 1,
"_contexts" : 1,
"created_time" : 1
},
"ns" : "mydb.mycoll",
"name" : "_reference_1_id_1__reference_2_id_1__contexts_1_created_time_1"
}
]
Когда я выполняю запрос как
db.mycoll.find({"_reference_2_id" : ObjectId("jkl7890123456")})
Это займет более часа (!) До его завершения, независимо от того, есть результаты или нет.
Есть идеи?
Обновление:
Вот какой вывод
db.mycoll.find({"_reference_2_id" : ObjectId("jkl7890123456")}).explain();
выглядит так:
{
"cursor" : "BasicCursor",
"nscanned" : 99209163,
"nscannedObjects" : 99209163,
"n" : 5007,
"millis" : 5705175,
"nYields" : 17389,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}