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