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