mongodb某字段仅有少量可选择性值时的索引建立策略

x
xiezixing
发布于 9 个月前

根据mongodb官网的描述,如果一个字段仅有new和proceed两个值的时候,这个时候建立单字段索引,mongodb就会创建低选择性索引,这种索引对查询效用毫无作用!那么这个时候的索引建立的策略是什么?

我们假设我们的集合(Collection)Movie结构如下:

{
status: 'finished', //仅有finished,review,hidden三种选择。
name: '爱情故事',
createdAt: 1611382398977  // double格式的时间戳
}

如果我们在这种结构的集合中对status建立单字段索引,即:

db.movie.createIndex( { "status": 1 } )

这个时候对查询的效率提升非常有限,这个时候,我们就可以考虑地选择性字段和其他一个多值字段组成复合索引,来提高选择效率。

比如我们上面这个movie表,我们在实际使用中就会使用createdAt倒序查询,即:

db.movie.find({status: 'finished'}).sort( { createdAt: -1 } )

我们会查询状态为finished的数据,通过createdAt倒序排列查询数据,即最新发布的在最上面。

这个时候,我们就可以通过创建复合索引,充分利用硬盘空间和提高查询效率:

db.movie.createIndex({"status":1, "createdAt": -1})

这个时候的索引策略是最完美可行的。

相关文章推荐
评论区
暂未开放
相关文章推荐