MongoDB中复杂查询的索引
我有以下疑问: 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} 但是在询问中,解释一下 我在创建时获取索引,而不是在我的另一个索引上 请针对上述内容提出适当的指标,并说明原因: 该计划旨在: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.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强制使用第二个索引来分析它。