0

感谢你的帮助。

我有一个包含这些统计数据的集合 我有 7 亿条看起来像这样的记录

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,"arrival":1,"duration":1,"capacity":1, “房间”: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,80, 183074,31774,359,314,64010,56170,5107,4673,147,115571,214,101564,287,66356,128,194487,100,207984,66353]},"到达":1384387200,"持续时间":1, “容量”:1,“房间”:1}).explain(){“光标”:“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”:假,“indexOnly”:假,“nYields”:0,“nChunkSkips”:0,“毫”:4,....}

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

谢谢 !

4

1 回答 1

0

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

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

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

不粘贴 indexBound 也无济于事,它可以提供索引组合是否最佳的线索。

于 2013-09-06T15:15:29.597 回答