布尔值上的MongoDB索引方向

vhmi4jdf  于 2023-04-11  发布在  Go
关注(0)|答案(1)|浏览(98)

当创建MongoDB索引时,需要为字段提供方向。方向关系到查询的性能,特别是对于复合索引,因为引擎知道它可以在某个时候停止寻找更多的结果。
当索引布尔值时,方向重要吗?当然,如果它是一个单一的索引,它可以向前或向后读取,但当它是一个复合索引时,我认为它很重要。
例如,我有一个包含数百万个条目的集合,我需要找到那些具有false的特定布尔值和两个给定日期之间的时间戳字段的条目(时间帧是在最近的过去,像一天前和几分钟前)。因此,我需要索引布尔值和时间戳字段。我认为最有效的方法是首先索引布尔值,然后是时间戳,因为这样它可以找到与布尔值匹配的条目,然后读取时间戳,直到它超出所需的时间范围(感谢排序)
因此,知道我只需要false值和时间帧的反时间顺序,我应该将布尔字段索引到哪个方向?

{
  my_boolean_field: 1,
  my_timestamp_field: -1
}

{
  my_boolean_field: -1,
  my_timestamp_field: -1
}

xdnvmnnf

xdnvmnnf1#

在索引布尔值时,方向似乎并不重要。
一个简单的测试,查找值等于true的字段,然后是false,显示索引总是在forward方向读取:

db.collection.find({my_boolean_value: true}).explain()

db.collection.find({my_boolean_value: false}).explain()

都在winningPlan中显示"direction" : "forward",
另外,当查看executionStats时,keysExamined匹配nbReturned字段。

相关问题