mongodb TTL索引可以用于查询吗?
Posted
技术标签:
【中文标题】mongodb TTL索引可以用于查询吗?【英文标题】:Can a mongodb TTL index be used for queries? 【发布时间】:2019-07-14 01:40:37 【问题描述】:一个集合有两个索引:
一) date: 1
B) date: -1
带 TTL
我删除了索引 A,因为与索引 B 相同的索引已经存在,尽管具有 TTL 并且排序顺序相反。
Mongodb 说:
TTL 索引支持查询的方式与非 TTL 索引相同。
相反的排序顺序应该无关紧要,因为 mongodb 可以在任一方向遍历索引。
但是,根据$indexStats
,索引 B 没有使用,实际上它也没有使用,因为现在执行查询需要相当长的时间。
为什么不使用索引 B?
【问题讨论】:
您使用的是哪个特定版本的 MongoDB 服务器?请更新您的问题以包含查询的explain(true)
的输出。这将显示所有考虑的候选计划。
【参考方案1】:
Mongodb 可以在 One field 上创建 asc 和 desc 索引。 如:
> db.ttt.createIndex( "lastModifiedDate": 1 , expireAfterSeconds: 3600 )
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 4,
"numIndexesAfter" : 5,
"ok" : 1
> db.ttt.createIndex( "lastModifiedDate": -1 , expireAfterSeconds: 3600 )
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 5,
"numIndexesAfter" : 6,
"ok" : 1
>
但如果您尝试重新创建索引,则无法更改它。
您可以使用getIndexes()
查看您的索引,并使用dropIndex()
重新创建它。
TTL INDEXES 也像非 TTL 索引一样工作。
为什么不使用索引 B?
这是根据您的查询和索引优化器。 如果你有更好的索引,当然不会用更差的。 您可以向我展示有关您的查询和索引的更多信息。
【讨论】:
索引 B 是唯一以date
开头的索引,因此 IMO 它是唯一适合使用的索引。
@Manuel 您能否使用explain(true)
输出和MongoDB 服务器版本更新您的问题?我们需要这些详细信息来查看查询计划者考虑了什么(并可能解释您的结果)。
@Manuel 你怎么知道,显示命令的结果。以上是关于mongodb TTL索引可以用于查询吗?的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB——索引属性之TTL索引(TTL Indexes)