时间序列索引
时间序列集合上的索引的行为通常与常规集合上的索引相同,但有一些额外的注意事项和限制。
如果 时间序列集合 上有 个 从节点(secondary node from replica set)索引 ,并且您需要降级特征兼容性版本(fCV),则必须首先删除与降级的 fCV 不兼容的所有从节点(secondary nodesetFeatureCompatibilityVersion
from replica set)索引。有关详细信息,请参阅 。
从版本6开始。 0 ,您可以为时间序列集合中的任何字段添加二级索引。 MongoDB 按文档桶而不是单个文档对时间序列集合进行索引。时间序列存储桶包含具有共享 MetaField 值的文档,并按时间相近的 timeField 值进行排序。 MongoDB 会对除 MetaField 之外的所有字段的最小值和最大值进行索引。对存储桶而不是单个文档进行索引可减小索引大小并提高查询效率。
提示
要提高查询性能,您可以手动在时间序列集合中的任何字段添加从节点(secondary node from replica set)索引。
集群化集合
默认情况下,MongoDB 基于存储桶时间对时间序列集合进行集群。
复合索引
6.3 版本中的新功能。
从 MongoDB 6开始。 3 ,MongoDB 在时间序列集合的 metaField 和 timeField 上创建默认复合索引。 MongoDB 使用此索引来提高查询性能和速度。
您可以在timeField
、 metaField
或测量字段上添加复合索引。
部分索引
6.0 版本中的新功能。
从 MongoDB 6开始。 0 ,您可以将$or
、 $in
和$geoWithin
操作符与时间序列集合上的部分索引一起使用。
您不能在 metaField 和 timeField 上创建部分索引。
TTL Indexes
6.3 版本中的新功能。
从 MongoDB 6开始。 3 ,您可以使用仅依赖于元字段的partialFilterExpression
创建TTL索引。在6之前的版本中。 3 ,只能根据expireAfterSeconds
参数创建 TTL 索引。
如果您的时间序列集合不使用expireAfterSeconds
选项使文档过期,则创建部分 TTL 索引只会为匹配文档设置过期时间。如果集合对所有文档使用expireAfterSeconds
,则可以使用部分 TTL 索引以使匹配文档更快过期。
禁止的索引
MongoDB 不允许对时间序列集合使用以下索引类型:
您无法在 MetaField 上创建稀疏索引。
索引最佳实践
使用 MetaField 索引进行筛选和相等操作。
使用 timeField 和其他索引字段进行范围查询。
一般索引策略也适用于时间序列集合。有关更多信息,请参阅索引策略。
有关详细信息和示例,请参阅向时间序列集合添加二级索引。