当创建MongoDB索引时,需要为字段提供方向。方向关系到查询的性能,特别是对于复合索引,因为引擎知道它可以在某个时候停止寻找更多的结果。
当索引布尔值时,方向重要吗?当然,如果它是一个单一的索引,它可以向前或向后读取,但当它是一个复合索引时,我认为它很重要。
例如,我有一个包含数百万个条目的集合,我需要找到那些具有false
的特定布尔值和两个给定日期之间的时间戳字段的条目(时间帧是在最近的过去,像一天前和几分钟前)。因此,我需要索引布尔值和时间戳字段。我认为最有效的方法是首先索引布尔值,然后是时间戳,因为这样它可以找到与布尔值匹配的条目,然后读取时间戳,直到它超出所需的时间范围(感谢排序)
因此,知道我只需要false
值和时间帧的反时间顺序,我应该将布尔字段索引到哪个方向?
{
my_boolean_field: 1,
my_timestamp_field: -1
}
或
{
my_boolean_field: -1,
my_timestamp_field: -1
}
?
1条答案
按热度按时间xdnvmnnf1#
在索引布尔值时,方向似乎并不重要。
一个简单的测试,查找值等于
true
的字段,然后是false
,显示索引总是在forward
方向读取:或
都在winningPlan中显示
"direction" : "forward",
。另外,当查看executionStats时,
keysExamined
匹配nbReturned
字段。