【发布时间】:2013-09-09 16:04:53
【问题描述】:
感谢大家的帮助。
我有一个包含此统计信息的集合 我有 7 亿条类似这样的记录
db.flight_availability.findOne() { “_id”:ObjectId(“5226465fc3b53d4f249c19fc”), “航班号”:9803, “到达”:1384819200, “持续时间”:1, “容量”:1, “房间”:1, “最低价格”:163, “min_price_packaged”:50, “rates_has_wifi”:1, “rates_has_baby_cot”:1, “rates_has_pets_allow”:1, “埃兰克”:0.25 }
当我进行查询时,我只对 4 个字段进行查询,因此我构建了一个看起来像这样的索引 db.flight_availabillity.ensureIndex({"flight_id":1,"arrival":1,"duration":1,"capacity":1,"rooms":1})
问题: 仅发送 1 个航班 id 时 find({"flight_id":{$in:[236]}) 结果很快就出来了
当使用多个航班 ID 时 find({"flight_id":{$in:[236,232,545,757]}) (而且我在查询中最多可以有 1000 个航班 ID)。我得到较慢的结果。
这是其中一个耗时 3.5 秒的解释,但我也有几个 10 秒
db.flight_availability.find({"flight_id":{$in:[333,207731,33993,277,127,183345,169019,156473,92715,5046,2927,2473,2112,2024,281,264,185,125,95, ,208065,183074,31774,359,314,64010,56170,5107,4673,147,115571,214,101564,287,66356,128,194487,100,207984,66353]},"到达":13843872" :1,"容量":1,"房间":1}).explain() { "cursor" : "BtreeCursor flight_id_1_arrival_1_departure_1_capacity_1_rooms_1 multi", “isMultiKey”:假, “n”:40, “nscannedObjects”:240, “nscanned”:358, “nscannedObjectsAllPlans”:597, “nscannedAllPlans”:715, “scanAndOrder”:假, “indexOnly”:假, “nYields”:0, “nChunkSkips”:0, “毫”:4, …… }
我想念什么?如何查询并快速获得结果?
谢谢!
【问题讨论】:
-
您使用的是哪个版本的 MongoDB?我之所以问,是因为以前的版本中有各种错误阻止 $in 使用它本来可以使用的索引。
-
我用的是2.4.6版
标签: mongodb performance indexing nosql