对于“获取下一个”样式用法,低选择性MongoDB索引是否有用?

时间:2018-12-06 20:11:57

标签: mongodb indexing

MongoDB索引的一般规则是在“高选择性”字段上创建索引。例如,对唯一ID的索引具有很高的选择性,而对布尔值或枚举字段的索引则可能具有很高的“低选择性”。

我有一个用例,其中记录具有“状态”字段,其中包含以下可能的值:进行中,已完成,声明,已声明。

我的服务器上有一些逻辑循环运行:

  1. 找到下一个“完成”记录,并将状态设置为“要求”。
  2. 对记录执行一些操作。
  3. 将状态设置为“已声明”。

当前,我没有关于“状态”的索引。当我执行“查找下一个”操作时,将进行收集扫描。因为我做了一个“ findOne”,所以我猜测/希望它在找到第一个匹配项后立即返回。将来,我可能需要将其更改为“ findMany”以分批处理,而不是一次处理。

在这种情况下,我感到不得不在“状态”上添加索引,但是我有冲突。一方面,这是一个选择性很低的字段(只有4个可能的值)。另一方面,感觉有了索引对于这种“获取下一个”行为会更有效。

对MongoDB有经验的人对此有意见吗?我在其他地方读过,做这种事情的另一种方法是对每个状态使用多个集合-在这里看起来更好吗?我还有其他选择吗?

0 个答案:

没有答案