MongoDB索引未被使用

时间:2018-01-12 22:53:19

标签: mongodb indexing

我有一系列带有修改索引的问题。

{
  "v" : 1,
  "key" : {
      "modified" : 1
  },
  "name" : "modified_1",
  "ns" : "app23568387.questions",
  "background" : true,
  "safe" : null
}

但是当我用修改后的字段查询问题时,mongo不会使用这个索引。

db.questions.find({modified: ISODate("2016-07-20T20:58:20.662Z")}).explain(true);

返回

{
  "cursor" : "BasicCursor",
  "isMultiKey" : false,
  "n" : 0,
  "nscannedObjects" : 19315626,
  "nscanned" : 19315626,
  "nscannedObjectsAllPlans" : 19315626,
  "nscannedAllPlans" : 19315626,
  "scanAndOrder" : false,
  "indexOnly" : false,
  "nYields" : 384889,
  "nChunkSkips" : 0,
  "millis" : 43334,
  "allPlans" : [ 
      {
          "cursor" : "BasicCursor",
          "isMultiKey" : false,
          "n" : 0,
          "nscannedObjects" : 19315626,
          "nscanned" : 19315626,
          "scanAndOrder" : false,
          "indexOnly" : false,
          "nChunkSkips" : 0
      }
  ],
  "server" : "c387.candidate.37:10387",
  "filterSet" : false,
  "stats" : {
      "type" : "COLLSCAN",
      "works" : 19624020,
      "yields" : 384889,
      "unyields" : 384889,
      "invalidates" : 3,
      "advanced" : 0,
      "needTime" : 19315627,
      "needFetch" : 0,
      "isEOF" : 1,
      "docsTested" : 19315626,
      "children" : []
  }
}

当我使用hint()时,mongo会抛出错误bad hint。 我有另一个文件夹集合,它们具有完全相同的索引,查询使用索引。 (返回"cursor" : "BtreeCursor modified_1"的{​​{1}})

问题和文件夹之间可能有什么区别?指数是否可能被打破"即使explain()返回它?如果是这样,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:2)

您的索引似乎并非完全在后台构建。您可以使用db.currentOp()命令来检查:

https://docs.mongodb.com/v3.0/reference/method/db.currentOp/#currentop-index-creation

同时检查mongod.log以查看索引构建过程中的任何错误。

修复的简单方法是删除索引并再次创建