稀疏索引¶
创建稀疏索引:
稀疏索引的特点: 如果针对field做索引,针对不含field列的文档,将不建立索引.
与之相对,普通索引会把该文档的field列的值认为NULL,并建索引.
适宜于: 小部分文档含有某列时.
db.collection.ensureIndex({field:1/-1}, {sparse:true});
总结:
在某一个被创建了稀疏索引字段上执行exists:false查询时,需要显示指定hint,其索引才会起作用;
而执行 exists:true查询时,则不需要。
在字段上创建普通索引 ,如果文档不含该字段则其索引值会被设为null,而稀疏索引会跳过该文档;
这就是说使用该索引扫描集合时稀疏索引会比普通索引少。
稀疏索引会跳过所有不包含被索引键的文档。
这个索引之所以称为 “稀疏” 是因为它并不包括集合中的所有文档。
如一个索引会导致查询或者排序的结果集是不完整的,则MongoDB将不使用这个稀疏索引,除非使用 hint() 方法来显示指定
例如,查询 { x: { $exists: false } } 将不会使用 x 键上的稀疏索引,除非显示的hint。
一个稀疏且唯一的索引,可以防止集合中的文档被索引键中出现重复值,同时也允许多个文档里不包含被索引键