我有一个类似下面的查询。显然,更好的索引是“platform_1_keyuserAccountID_1_weiboAccountID_1_postTime_1”,但是mongodb选择“weiboAccountID_1”,我做错了什么?
db.inbox_weibo.find({platform: "sina", keyuserAccountID:"1665337047", weiboAccountID: "2271338624"}).explain(true);
{ "cursor" : "BtreeCursor weiboAccountID_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 1, "nscanned" : 1, "nscannedObjectsAllPlans" : 24, "nscannedAllPlans" : 634425, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 1, "nChunkSkips" : 0, "millis" : 2912, "indexBounds" : { "weiboAccountID" : [ [ "2271338624", "2271338624" ] ] }, "allPlans" : [ { "cursor" : "BtreeCursor weiboAccountID_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 1, "nscanned" : 1, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "weiboAccountID" : [ [ "2271338624", "2271338624" ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealed_1_operatorID_1_weiboAccountID_1_postTIme_-1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 1, "nscanned" : 62, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "operatorID" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "weiboAccountID" : [ [ "2271338624", "2271338624" ] ], "postTIme" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_weiboAccountID_1_postTime_-1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 1, "nscanned" : 1, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "weiboAccountID" : [ [ "2271338624", "2271338624" ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor platform_keyuserAccountID_dealed_postTime_weiboAccountID", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 1, "nscanned" : 634331, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ], "weiboAccountID" : [ [ "2271338624", "2271338624" ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_mid_1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "mid" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealerID_1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealerID" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor distinctAccountAgg", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "operatorID" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor fansCountUndealed", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "fromType" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "fansCount" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ], "usePicture" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor retweetCountUndealed", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "fromType" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "sourceRetweetCount" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ], "usePicture" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor interactUndealed", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "fromType" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "userInteractionCount" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ], "usePicture" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealed_1_dealTime_-1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "dealTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealerID_1_postTime_-1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealerID" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_postTime_-1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "platform" : [ [ "sina", "sina" ] ], "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "postTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ] } }, { "cursor" : "BtreeCursor keyuserAccountID_dealed_createTime_-1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 2, "nscanned" : 3, "scanAndOrder" : false, "indexOnly" : false, "nChunkSkips" : 0, "indexBounds" : { "keyuserAccountID" : [ [ "1665337047", "1665337047" ] ], "dealed" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "createTime" : [ [ { "$maxElement" : 1 }, { "$minElement" : 1 } ] ] } }
答案 0 :(得分:1)
我不认为其他指数“更好”。似乎两个索引(你建议使用的那个和mongodb使用的索引)都会使用“nscanned:1”返回查询的对象,因此它们对于此查询同样完美。我说因为你的测试数据集中的“weiboAccountID”确切地定义了你正在寻找的那条记录,所以在这种情况下不需要其他索引 - mongodb会选择第一个合适的。尝试使用相同的weiboAccountID添加更多记录(如果重复的ID在您的数据集中完全有效)并重新运行查询,请查看它如何更改执行。