MongoDB警告查询未使用索引

MongoDB警告查询未使用索引,mongodb,indexing,Mongodb,Indexing,我有一个模糊的记忆,MongoDB将在查询使用未编入索引的字段时向其日志输出一条消息,但是我无法在本地复制这个消息(使用一个公认的小数据集),也没有找到它的任何文档 我是在想象还是有这样的特征?如果是,有人可以链接到文档吗?AFAIK日志或其他任何地方都没有直接的迹象。间接缺少索引可能导致以下日志条目: 警告:ClientCursor::yield无法解锁递归锁的b/c-通常发生在find和modify中 query db.coll nscanned:656204 reslen:20 5305

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


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

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

  • 警告:ClientCursor::yield无法解锁递归锁的b/c
    -通常发生在
    find和modify
  • query db.coll nscanned:656204 reslen:20 5305ms
    -使用大量扫描文档进行慢速查询

如果相应的查询执行速度足够快,上述两项都不会显示。

也许您指的是“解释”功能

请参阅此链接:


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

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

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

grep nscanned /path/to/mongodb.log | grep -v "nscanned:1 " | grep -v "nscanned:0 "
我发现这一点的原始推文:

您可以看到有关日志输出含义的更多信息

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


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

“5305ms”对我来说就像是一个缓慢/未索引的查询的直接标志=)除了此签出之外,它还解释了您可以在探查器中查看的各种数据。--slowms选项可用于降低查询被视为太慢的阈值,以便查看更多不使用索引的操作。