索引可以提升文档的查询速度,但建立索引的过程需要使用计算与存储资源,在已经建立索引的前提下,插入新的文档会引起索引顺序的重排。
MongoDB 的索引是基于 B-tree 数据结构及对应算法形成的。树索引存储特定字段或字段集的值,按字段值排序。索引条目的排序支持有效的等式匹配和基于范围的查询操作。

注意:通过 getIndexes() 不能区分该索引是单键索引还是多键索引,可以 explain() 执行计划的打印信息中查看(isMultKey 属性)
复合索引针对多个字段联合创建索引,先按照第一个字段排序,第一个字段相同的文档按照第二个字段排序,依次类推。
语法:
db.collection_name.createIndex({索引键名:排序规则, 索引键名:排序规则, …})
复合索引能满足的查询场景比单字段索引更丰富,不光能满足多个字段组合起来的查询,也能满足所有能匹配符合索引前缀的查询。
注意:创建一个复合索引 A、B, 查询条件中包含A,B会走索引,查询条件中包含A,也会走索引,查询条件中没有A,只有一个B,此时不会走索引。A就称为索引前缀。
交叉索引就是为了一个集合的多个字段分别建立索引,在查询的时候通过多个字段作为查询条件,这种情况称为交叉索引。
交叉索引和复合索引区别:交叉索引 A、B是两个索引,复合索引中 A、B组成了一个索引。
注意:一个集合中包含交叉索引A、 B,在查询条件中包含A、或者包含B、或者包含A、B的情况下,都会触发交叉索引。
部分索引是针对符合某个特定条件的文档建立索引,3.2版本才支持该特性。
MongoDB 部分索引只为那些在一个集合中,满足指定的筛选条件的文档创建索引。简单理解就是部分索引是带有过滤条件的索引,即索引只存在于某些文档之上
语法:
db.collection_name.createIndex({索引键名:排序规则},{partialFilterExpression:{“前面进行排序的键名”:{匹配条件:条件值}}})
注意:部分索引和唯一所以一块使用,唯一约束只适用于满足筛选条件的文档。
1.所有的查询字段是索引的一部分
2.查询返回的所有字段在同一个索引中
例如:如果一个索引中包含A、B 两个字段,查询条件只有一个A, 返回结果为 A、B两个字段,则此时会触发覆盖索引,即不再扫描整个文档,而是直接从索引中获取数据。
全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
MongoDB 从 2.4 版本开始支持全文检索,目前支持15种语言的全文索引(danish、dutch、english、finnish、french、german、hungarian、italian、norwegian、portuguese、romanian、russian、spanish、swedish、turkish)。
mongo2.6之后默认开启全文检索。
创建语法:
db.collection_name.ensureIndex({全文索引的字段名:”text”})
查询语法:
db.collection_name.find({$text:{$search:”检索的值”}})
到此这篇MongoDB数据库基础 之索引的简单理解的文章就介绍到这了,更多相关MongoDB索引简单理解内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!