MongoDB-稀疏索引
  TEZNKK3IfmPf 2023年11月12日 12 0

默认情况下 MongoDB 会给每一个文档都创建索引, 哪怕这个文档中没有指定索引的字段或者字段的取值是 Null,但是这样大大增加了索引的体积, 所以为了进一步优化索引占用的存储空间, 我们可以创建稀疏索引,也就是只会为存在索引字段, 并且索引字段取值不是 null 的文档创建索引。

书写格式:

db.<collection>.createIndex({<field>:<1 or -1>, ...}, {sparse:true}})

插入测试数据:

db.person.insert([
{name:'cs', age:19},
{name:'as', age:18},
{name:'bs', age:17}
])

首先先创建一个唯一索引:

db.person.createIndex({age:1}, {unique:true})

然后插入数据测试:

db.person.insert({name:'BNTang'})

第一次插入是不会报错,但是在第二次进行插入是会报错的,因为两次插入的数据结构如下:

BNTang null
BNTang null

所以在我们创建的唯一索引他会认为这是两个相同的数据,那么这个时候就可以利用我这次要介绍的索引的稀疏索引来解决该问题,如果索引具备了唯一性又具备了稀疏性, 那么就可以多次添加缺失了索引字段的文档了。

创建唯一索引与稀疏索引:

db.person.createIndex({age:1}, {unique:true, sparse: true})

多次运行插入,你会发现都成功了,在创建唯一索引与稀疏索引之前需要将之前的唯一索引先删除了在添加:

db.person.insert({name:'BNTang'})

!> 如果索引字段既具备唯一性又具备稀疏性, 那么就可以在集合中保存多个缺失唯一索引字段的文档,原因:如果索引具备了稀疏性, 那么就不会为缺失了索引字段或者索引字段取值是 null 的文档创建索引了, 所以就不会冲突了。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   59   0   0 mongodb
  TEZNKK3IfmPf   2023年11月15日   44   0   0 shiromongodb
  TEZNKK3IfmPf   2023年11月15日   29   0   0 mongodbjava
  TEZNKK3IfmPf   2023年11月14日   28   0   0 mysql索引
  TEZNKK3IfmPf   2023年11月14日   47   0   0 索引javascript
  TEZNKK3IfmPf   2024年05月17日   48   0   0 查询mysql索引
  TEZNKK3IfmPf   2024年03月29日   60   0   0 mongodb
  TEZNKK3IfmPf   2024年03月29日   58   0   0 mysql索引
  TEZNKK3IfmPf   2023年11月15日   28   0   0 mongodb
TEZNKK3IfmPf