mongodb - mongodb TTL索引可以用于查询吗?
问题描述
一个集合有两个索引:
- 一个)
{ date: 1 }
- B)
{ date: -1 }
带 TTL
我删除了索引 A,因为与索引 B 相同的索引已经存在,尽管具有 TTL 并且排序顺序相反。
Mongodb说:
TTL 索引以与非 TTL 索引相同的方式支持查询。
相反的排序顺序应该无关紧要,因为 mongodb 可以在任一方向遍历索引。
然而,索引 B 并没有被使用$indexStats
,事实上它也没有被使用,因为查询现在需要相当长的时间来执行。
为什么不使用索引 B?
解决方案
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?
这是根据您的查询和索引优化器。
如果你有更好的索引,当然不会用更差的。
您可以向我展示有关您的查询和索引的更多信息。
推荐阅读
- javascript - 是否可以使用 TypeScript 在 HTML 中“预渲染”一个 div?
- reactjs - 部署 React Web 应用微服务环境
- clojure - clojure 宏:无法解析符号
- bash - 如何从自定义 udev 规则运行具有正确权限的脚本?
- php - 将 MongoDB Aggregation $all (JS) 翻译成 Doctrine ODM Aggregation (PHP)
- java - 更改方法参考的类型
- html - 主元素不得作为节元素的后代出现
- c# - 如何在 c# WPF 中像 android 一样制作 CircularFloatingActionMenu?
- python - mac run deepfakes - faceswap ' faceswap.py' 出错
- certificate - 如何在提琴手请求或邮递员请求中添加 CA 证书?