【问题标题】:mongodb 2.6.3 use wrong indexmongodb 2.6.3 使用错误的索引
【发布时间】:2014-10-16 05:50:51
【问题描述】:

我有一个如下查询。显然更好的索引是“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”:假, “n”:1, “nscannedObjects”:1, “nscanned”:1, “nscannedObjectsAllPlans”:24, “nscannedAllPlans”:634425, “scanAndOrder”:假, “indexOnly”:假, “nYields”:1, “nChunkSkips”:0, “毫”:2912, “索引边界”:{ “微博账号”:[ [ "2271338624", “2271338624” ] ] }, “所有计划”:[ { "cursor" : "BtreeCursor weiboAccountID_1", “isMultiKey”:假, “n”:1, “nscannedObjects”:1, “nscanned”:1, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “微博账号”:[ [ "2271338624", “2271338624” ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealed_1_operatorID_1_weiboAccountID_1_postTIme_-1", “isMultiKey”:假, “n”:1, “nscannedObjects”:1, “nscanned”:62, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “操作员ID”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “微博账号”:[ [ "2271338624", “2271338624” ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_weiboAccountID_1_postTime_-1", “isMultiKey”:假, “n”:1, “nscannedObjects”:1, “nscanned”:1, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “微博账号”:[ [ "2271338624", “2271338624” ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ] } }, { "cursor" : "BtreeCursor platform_keyuserAccountID_dealed_postTime_weiboAccountID", “isMultiKey”:假, “n”:1, “nscannedObjects”:1, “nscanned”:634331, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ], “微博账号”:[ [ "2271338624", “2271338624” ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_mid_1", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “中” : [ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealerID_1", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “经销商ID”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ] } }, { "cursor" : "BtreeCursor distinctAccountAgg", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “操作员ID”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ] } }, { "cursor" : "BtreeCursor fanCountUndealed", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “来自类型”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “粉丝数”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ], “使用图片”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ] } }, { "cursor" : "BtreeCursor retweetCountUndealed", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “来自类型”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “sourceRetweetCount”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ], “使用图片”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ] } }, { "cursor" : "BtreeCursor interactUndealed", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “来自类型”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “用户交互计数”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ], “使用图片”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealed_1_dealTime_-1", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “交易时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_dealerID_1_postTime_-1", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “经销商ID”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ] } }, { "cursor" : "BtreeCursor platform_1_keyuserAccountID_1_postTime_-1", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “平台” : [ [ “新浪”, “新浪” ] ], “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “后时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ] } }, { "cursor" : "BtreeCursor keyuserAccountID_dealed_createTime_-1", “isMultiKey”:假, “n”:0, “nscannedObjects”:2, “nscanned”:3, “scanAndOrder”:假, “indexOnly”:假, “nChunkSkips”:0, “索引边界”:{ “keyuserAccountID”:[ [ "1665337047", “1665337047” ] ], “成交”:[ [ { “$minElement”:1 }, { “$ 最大元素”:1 } ] ], “创建时间”:[ [ { “$ 最大元素”:1 }, { “$minElement”:1 } ] ] } }

【问题讨论】:

    标签: mongodb-indexes


    【解决方案1】:

    我不认为其他索引“更好”。似乎两个索引(您建议的索引和 mongodb 使用的索引)都返回带有“nscanned:1”的查询对象,因此它们同样适合此查询。我说,由于您的测试数据集中的“weiboAccountID”准确地定义了您正在寻找的一条记录,因此在这种情况下不需要其他索引 - mongodb 将选择第一个合适的。尝试使用相同的 weiboAccountID 添加更多记录(如果重复的 Id 在您的数据集中完全有效)并重新运行查询,看看它如何更改执行。

    【讨论】:

      猜你喜欢
      • 2014-04-25
      • 1970-01-01
      • 2013-06-09
      • 2014-04-16
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多