索引的稀疏性
默认情况下 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 的文档创建索引了, 所以就不会冲突了。