MongoDB警告不使用索引的查询

时间:2012-02-08 10:35:01

标签: mongodb indexing

我有一个模糊的内存,如果查询使用未编入索引的字段,MongoDB将向其日志输出一条消息,但是我无法在本地重现(使用一个公认的小数据集),也没有为它找到任何文档

我想象的东西还是有这样的特征?如果是,是否有人可以链接到文档?

4 个答案:

答案 0 :(得分:5)

您需要打开分析以从mongodb获取有意义的日志 - 将分析设置为1就足够了。

然后,您可以使用日志中的任意数量的搜索来查找未编入索引的查询,例如:

grep nscanned /path/to/mongodb.log | grep -v "nscanned:1 " | grep -v "nscanned:0 "

原始推文,我发现了这一点:https://twitter.com/#!/eonwhite/status/21498320559

您可以详细了解日志输出的含义in mongo's docs

  

如果nscanned远高于nredurned,则数据库正在扫描许多对象以查找目标对象。考虑创建一个索引来改善这一点。

答案 1 :(得分:4)

您可能会想到notablescan parameterconfiguration option。但是,它不是警告或记录功能。相反,它会导致服务器在发出没有有用索引的查询时抛出错误(强制服务器扫描整个集合)。

答案 2 :(得分:3)

也许你指的是“解释”功能?

请参阅此链接:http://www.mongodb.org/display/DOCS/Explain

基本上,您可以告诉Mongo在运行查询时为您提供额外的数据,该数据包括有关是否使用索引的详细信息。

答案 3 :(得分:0)

AFAIK在日志中或其他任何地方都没有直接的迹象。间接缺少索引可能会导致这些日志条目:

  • warning: ClientCursor::yield can't unlock b/c of recursive lock - 通常发生在findAndModify
  • query db.coll nscanned:656204 reslen:20 5305ms - 使用大量扫描文档进行查询速度慢。

如果相应的查询执行得足够快,上述任何一项都不会显示。