MongoDB中复杂查询的索引

MongoDB中复杂查询的索引,mongodb,indexing,mongodb-query,Mongodb,Indexing,Mongodb Query,我有以下疑问: db.餐厅服务订单。查找{订单结算状态:1,订单状态:{$in:[6,4]},创建位置:{$lte:ISODate2015-04-10T00:00:00.000Z,$gte:ISODate2015-03-10T00:00:00.000Z} 我创建了以下索引: 索引{created_at:1}, 索引{订单结算状态:1,订单状态:1,创建时间:1} 但是在询问中,解释一下 我在创建时获取索引,而不是在我的另一个索引上 请针对上述内容提出适当的指标,并说明原因: 该计划旨在: db.

我有以下疑问:

db.餐厅服务订单。查找{订单结算状态:1,订单状态:{$in:[6,4]},创建位置:{$lte:ISODate2015-04-10T00:00:00.000Z,$gte:ISODate2015-03-10T00:00:00.000Z} 我创建了以下索引:

索引{created_at:1}, 索引{订单结算状态:1,订单状态:1,创建时间:1} 但是在询问中,解释一下

我在创建时获取索引,而不是在我的另一个索引上

请针对上述内容提出适当的指标,并说明原因:

该计划旨在:

db.restaurant_service_orders.find({order_settlement_status :1,order_status : {"$in" : [6,4]}, created_at : {"$lte" :  ISODate("2015-04-10T00:00:00.000Z"), "$gte" :  ISODate("2014-03-10T00:00:00.000Z")}}).explain()
{cursor:BtreeCursor在_1处创建,isMultiKey:false,n :182222,nscanned项目:209645,nscanned:209645, nscannedObjectsAllPlans:210453,nscannedAllPlans:210756, 扫描者:false,索引:false,nYields:0, nChunkSkips:0,millis:815,indexBounds:{已创建 : [ [ ISODATE 2014-03-10T00:00:00Z, ISODate2015-04-10T00:00:00Z]},服务器:Junaids MacBook Pro.本地:27017}

使用提示解释计划:

 db.restaurant_service_orders.find({order_settlement_status :1,order_status : {"$in" : [6,4]}, created_at : {"$lte" :  ISODate("2015-04-10T00:00:00.000Z"), "$gte" :  ISODate("2014-03-10T00:00:00.000Z")}}).hint({order_settlement_status :1,order_status : 1, created_at : 1}).explain()
{cursor:BtreeCursor 订单\结算\状态\订单\状态\创建\在\ 1 multi, isMultiKey:false,n:182222,nscannedObjects:182222, nscanned:182223,NSCANNEDOBJECTS:182222, nscannedAllPlans:182223,扫描者:假,间接: 错,尼尔斯:2,跳过:0,米利斯:540, indexBounds:{订单结算状态:[[ 1. 1]],订单状态:[[ 4. 4 ], [ 6. 6]],创建位置:[[ ISODATE 2014-03-10T00:00:00Z, ISODate2015-04-10T00:00:00Z]},服务器:Junaids MacBook Pro.本地:27017}


您是否尝试将第二个索引与@Philipp:一起使用?这是否意味着,与订单结算状态为1、订单状态为1、创建状态为1的索引相比,创建状态为1的索引更优化?Mongo引擎在执行查询之前评估索引。它没有显示在解释计划中,因为它认为第二个索引没有用处,因为可以使用第一个索引获取结果。换句话说,第一个索引足以满足需要。不过你绝对肯定第二个索引会提高性能。然后使用提示选项。@zooney请尝试一下,看看它的性能是更好还是更差。然后我们可以判断这是否是查询优化器的侥幸,或者第二个索引是否确实没有帮助,可能是因为该查询中存在无法使用索引的内容。@zooney如果您不合作,我们无法帮助您。请尝试使用.hint和.explain强制使用第二个索引来分析它。