MongoDB $ IN查询性能问题

时间:2013-09-05 17:49:09

标签: mongodb performance indexing nosql

感谢所有人的帮助。

我有一个这个统计数据的集合 我得到了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,   ....   }

我想念的是什么?如何查询并获得快速结果?

谢谢!

1 个答案:

答案 0 :(得分:0)

在某些MongoDB版本中,$ in不使用索引 - 对于同一查询,Mongo也有使用多个索引的限制。

您的查询包括flight_id,到达,持续时间,容量和房间。尝试设置一个具有到达,持续时间,容量和房间的索引,这将为您提供选择标准的良好索引,而不是放置所有字段。

在选择标准已经完成艰苦工作之后,flight_id将只是最终选择。

也没有帮助indexBound没有被粘贴,它可以提供索引组成是否最佳的线索。

相关问题