MongoDB部分索引(Partial Indexes)和稀疏索引(Sparse Indexes)的区别

参考文档:

​​​​​​mongoose - What is difference between partial indexes and sparse indexes mongodb? - Stack Overflow

稀疏索引

稀疏索引只包含具有索引字段的文档(包含索引字段是空值的文档),它将跳过任何没有索引字段的文档。索引是“稀疏的”。非稀疏索引包含集合中的所有文档,为那些不包含索引字段的文档存储空值。

假设你有包含如下文档的集合:

{ _id: 1, firstname: 'John', lastname: 'Black', age: 20 }
{ _id: 2, firstname: 'Stive', lastname: 'White', age: 17 }
{ _id: 3, firstname: 'Tom', age: 22 }

如果你为lastname字段创建索引,语句为:

db.users.createIndex({ lastname: 1 });

它将为3个文档上创建索引,但是我们其实不需要在_id:3的文档上创建索引。为了避免这种为空字段创建索引的情况,mongodb引入了稀疏索引。通过指定sparse:true。

db.users.createIndex({ lastname: 1, sparse: true });

此时MongoDB将只会为两个文档(_id:1,_id:2)添加索引。

我们看到稀疏索引只是简单的检查非空字段,假设我们想为age大于18的文档创建索引,我们就不能通过稀疏索引来解决了,这就引入了部分索引。

部分索引

部分索引仅对集合中满足指定筛选条件的文档进行索引,通过索引集合中文档的子集,部分索引的存储需求更低,索引创建和维护的性能成本也更低。

例如上文中我们为age大于18的文档创建索引。

db.person.createIndex( 
  { age: 1}, 
  { partialFilterExpression: { age: { $gte: 18 }}
);

这个例子将只为一个文档(_id:1)设置索引。

部分索引是稀疏索引的复杂版本,它将过滤文档,不仅检查它们的存在。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值