时间序列索引
时间序列集合上的索引通常与常规集合上的索引类似,但有一些额外的考虑因素和限制。
If there are secondary indexes on time series collections and you need to downgrade the feature compatibility version (FCV), you must first drop any secondary indexes that are incompatible with the downgraded FCV. For more information, see 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 和其他索引字段进行范围查询。
一般索引策略也适用于时间序列集合。有关更多信息,请参阅索引策略。
有关详细信息和示例,请参阅向时间序列集合添加二级索引。