感谢所有人的帮助。
我有一个这个统计数据的集合 我得到了700万条记录,看起来像这样
db.flight_availabillity.findOne() { “_id”:ObjectId(“5226465fc3b53d4f249c19fc”), “flight_id”:9803, “到达”:1384819200, “持续时间”:1, “容量”:1, “房间”:1, “min_price”:163, “min_price_packaged”:50, “rates_has_wifi”:1, “rates_has_baby_cot”:1, “rates_has_pets_allow”:1, “erank”:0.25 }
当我查询时,我只在4个字段上执行,因此我构建了一个类似于此的索引 db.flight_availabillity.ensureIndex({ “flight_id”:1, “到达”:1, “持续时间”:1, “容量”:1, “房间”:1})
问题: 仅发送1个航班ID时发现({“flight_id”:{$ in:[236]}) 结果快速发展
使用多个航班ID时查找({“flight_id”:{$ in:[236,232,545,757]}) (我在查询中最多可以有1000个航班ID)。我得到的结果较慢。
以下是其中一个花了3.5秒的解释,但我也有10秒的几次
db.flight_availabillity.find({ “flight_id”:{$中:[333,207731,33993,277,127,183345,169019,156473,92715,5046,2927,2473,2112,2024,281,264,185,125,95,80 ,208065,183074,31774,359,314,64010,56170,5107,4673,147,115571,214,101564,287,66356,128,194487,100,207984,66353]}, “到达”:1384387200, “持续时间” :1, “容量”:1, “房间”:1})解释() { “光标”:“BtreeCursor flight_id_1_arrival_1_departure_1_capacity_1_rooms_1 multi”, “isMultiKey”:false, “n”:40, “nscannedObjects”:240, “nscanned”:358, “nscannedObjectsAllPlans”:597, “nscannedAllPlans”:715, “scanAndOrder”:false, “indexOnly”:false, “nYields”:0, “nChunkSkips”:0, “millis”:4, .... }
我想念的是什么?如何查询并获得快速结果?
谢谢!
答案 0 :(得分:0)
在某些MongoDB版本中,$ in不使用索引 - 对于同一查询,Mongo也有使用多个索引的限制。
您的查询包括flight_id,到达,持续时间,容量和房间。尝试设置一个具有到达,持续时间,容量和房间的索引,这将为您提供选择标准的良好索引,而不是放置所有字段。
在选择标准已经完成艰苦工作之后,flight_id将只是最终选择。
也没有帮助indexBound没有被粘贴,它可以提供索引组成是否最佳的线索。