首页 > 解决方案 > Mongo DB Running find 扫描冗余索引

问题描述

我有一个安装在 Linux 上的 Mongo DB 服务器 V4.0.0。我有一个名为“日志”的集合。

我有一个 Windows 服务,在 .NET Framework 4.7.2634.0 上运行,C# 驱动程序版本 2.5.0.0

所以,我有几个问题

  1. 如果不同的机器使用不同的 C# 驱动版本访问 Mongo DB 可以吗?
  2. 可能是因为 Mongo Compass 1.23.0 一直在收集我的收藏,因为我的性能很差,一旦我关闭它,Mongo DB 似乎有了显着改善。
  3. 对于由于超时而失败的查询,为什么我在 Mongo DB 日志中找不到完整的查找语法和解释?
  4. 我有几个索引。其中我有这两个
{ Section: 1, Headline: 1, Timestamp: -1 }
{ Section: 1, Severity: 1, Timestamp: -1 }

我在表演

db.logs.find({ Section: "Machine", Headline: /^Shutdown.*/ }
,在日志中,我看到
planSummary: IXSCAN { Section: 1, Headline: 1, Timestamp: -1 },
IXSCAN { Section: 1, Severity: 1, Timestamp: -1 }
这很奇怪,如果我只过滤第一个索引中包含的字段(标题字段),为什么它还要扫描第二个索引(具有严重性字段的那个)?

标签: mongodb

解决方案


如果不同的机器使用不同的 C# 驱动版本访问 Mongo DB 可以吗?

是的。

可能是因为 Mongo Compass 1.23.0 一直在收集我的收藏,因为我的性能很差,一旦我关闭它,Mongo DB 似乎有了显着改善。

启用完整查询日志记录以验证“不断聚合我的集合”假设。假设这是实际发生的情况,请使用连接元数据来确定哪个驱动程序正在发出这些查询。

对于由于超时而失败的查询,为什么我在 Mongo DB 日志中找不到完整的查找语法和解释?

您尚未启用查询日志记录,或者查询没有发送到服务器,或者您在日志中错过了它,或者您查看了错误的日志。


推荐阅读