首页 > 解决方案 > mongodb TTL索引可以用于查询吗?

问题描述

一个集合有两个索引:

我删除了索引 A,因为与索引 B 相同的索引已经存在,尽管具有 TTL 并且排序顺序相反。

Mongodb说:

TTL 索引以与非 TTL 索引相同的方式支持查询。

相反的排序顺序应该无关紧要,因为 mongodb 可以在任一方向遍历索引。

然而,索引 B 并没有被使用$indexStats,事实上它也没有被使用,因为查询现在需要相当长的时间来执行。

为什么不使用索引 B?

标签: mongodbindexing

解决方案


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?

这是根据您的查询和索引优化器。
如果你有更好的索引,当然不会用更差的。
您可以向我展示有关您的查询和索引的更多信息。


推荐阅读