mongodb TTL索引可以用于查询吗?

时间:2019-07-14 01:40:37

标签: mongodb indexing

一个集合有两个索引:

  • A){ date: 1 }
  • B){ date: -1 }和TTL

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

Mongodb说:

  

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

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

但是,根据$indexStats,索引B并未使用,实际上,索引B并未使用,因为查询现在需要更长的时间才能执行。

为什么不使用索引B?

1 个答案:

答案 0 :(得分:0)

Mongodb可以在一个字段上创建索引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索引也像非TTL索引一样工作。

为什么不使用索引B?

这符合您的查询和索引优化器。
如果您拥有更好的索引,那么当然不会使用更差的索引。
您可以向我展示有关您的查询和索引的更多信息。