【MongoDB】索引概述(二)

四、索引属性

1.唯一索引

索引的unique属性使MongoDB防止索引字段出现重复值。除了唯一约束功能之外,唯一索引在功能上可以与其他MongoDB索引互换。

2.局部索引

3.2版中的新功能。

 

局部索引仅索引集合中符合指定过滤器表达式的文档。通过索引集合中文档的子集,局部索引具有较低的存储需求,并降低了索引创建和维护的性能成本。

局部索引提供了稀疏索引功能的超集,应优先于稀疏索引。

超集定义:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来,S2是S1的子集。 S1是S2的超集,若S1中一定有S2中没有的元素,则S1是S2的真超集,反过来S2是S1的真子集

 

3.稀疏索引

索引的稀疏属性可确保索引仅包含具有索引字段的文档。索引会跳过没有索引字段的文档。

可以将稀疏索引选项与唯一索引选项结合使用,以防止插入索引字段具有重复值的文档,并跳过缺少索引字段的索引文档。

 

4.TTL索引

TTL索引是MongoDB可以使用的特殊索引,可以在一定时间后自动从集合中删除文档。对于某些类型的信息(例如机器生成的事件数据,日志和会话信息),它们仅需要在数据库中保留有限的时间,这是理想的选择。

请参阅:通过设置TTL使集合中的数据过期以获取实现说明

五、索引作用

索引可以提高读取操作的效率。 Analyze Query Performance教程提供了带有或不带有索引的查询执行统计信息的示例。

有关MongoDB如何选择要使用的索引的信息,请参阅查询优化器

六、索引和排序规则

此项是3.4版的新增功能。

归类允许用户为字符串比较指定特定语言的规则,例如字母大写和重音符号的规则。

本节介绍的是Mongo Shell下使用排序规则的方法:

一个操作要将索引用于字符串比较,同时必须指定相同的排序规则。即,具有排序规则的索引不能支持对索引字段进行字符串比较的操作(如果该操作指定了不同的排序规则)。

例如,集合myColl在字符串字段category 建立索引,同时排序规则local设置为“ fr”的。

db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )

以下查询操作指定与索引相同的排序规则时,可以使用索引:

db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )

但是,默认情况下使用“simple”二进制排序的以下查询操作不能使用索引:

db.myColl.find( { category: "cafe" } )

对于索引前缀键不是字符串,数组和嵌入式文档的复合索引,指定其他排序规则的操作仍可以使用索引来支持索引前缀键的比较。

例如,集合myColl在数字类型字段score和price以及字符串类型字段category上有一个复合索引;使用排序规则“ fr”创建索引以进行字符串比较:

db.myColl.createIndex(

   { score: 1, price: 1, category: 1 },

   { collation: { locale: "fr" } } )

以下使用“simple”二进制排序规则进行字符串比较的操作可以使用索引:

db.myColl.find( { score: 5 } ).sort( { price: 1 } )

db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )

以下操作将“simple”二进制排序规则用于索引category字段上的字符串比较,该操作可以使用索引仅满足查询score: 5部分:

db.myColl.find( { score: 5, category: "cafe" } )

有关排序规则的更多信息,请参阅collation reference page.

以下索引仅支持简单的二进制比较,不支持排序规则:

七、覆盖查询

当查询条件和查询的投影仅包含索引字段时,MongoDB直接从索引返回结果,而无需扫描任何文档或将文档带入内存。这些涵盖的查询可能非常有效。

仅使用索引来匹配查询条件并返回结果的查询图。 MongoDB无需检查索引之外的数据即可完成查询。

 

有关覆盖查询的更多信息,请参见覆盖查询

 

八、索引交集

MongoDB可以使用索引交集来完成查询。对于指定复合查询条件的查询,如果一个索引可以满足查询条件的一部分,而另一个索引可以满足查询条件的另一部分,则MongoDB可以使用两个索引的交集来满足查询。使用复合索引还是使用索引交集更有效取决于特定查询和系统。

有关索引交集的详细信息,请参见索引交集

 

九、限制条件

索引也有某些限制条件,例如索引键的长度或每个集合的索引数。有关详细信息,请参见索引的限制

 

十、其他注意事项

尽管索引可以提高查询性能,但是索引还提出了一些操作上的考虑。有关更多信息,请参见索引的操作注意事项

应用程序在建立索引期间可能会遇到性能下降的情况,包括对集合的有限读/写访问权限。有关索引构建过程的更多信息,请参见填充集合上的索引构建,包括复制环境中的索引构建部分。

一些驱动程序可能使用NumberLong(1)而不是1来指定索引。这对结果索引没有任何影响。

 

上篇:索引概述(一)  

下篇:单字段索引

原文参考:https://docs.mongodb.com/manual/indexes/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章