目录
一、概述
二、索引的类型
1、单字段索引
2、复合索引
3、其他索引
三、索引的管理
1、索引的创建
2、索引的查看
3、索引的删除
四、索引的使用
1、执行计划
2、涵盖的查询
一、概述
索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,也就是扫描集合中的每一个文档,以选择与查询语句匹配的文档。这种扫描全集和的查询效率是非常低的,特别是在处理大量的数据时,查询可能要花费几十秒甚至几分钟,这对服务器的性能是非常致命的。如果查询存在适当的索引,就可以使用该索引限制必须检查的文档数。
索引是特殊的数据结构,他以易于遍历的形式存储集合数据集的一小部分。索引存储特点的字段或一组字段的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作。此外,MongoDB还可以使用索引中的排序返回排序结果。
MongoDB索引使用的是B-Tree而MySQL是B+Tree
二、索引的类型
1、单字段索引
MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引。称为单字段索引。对于单个字段索引和排序操作,索引键的排序顺序并不重要,因为MongoDB可以在任何方向上遍历索引。
2、复合索引
MongoDB还支持多个字段的用户定义索引,也就是复合索引
3、其他索引
三、索引的管理
1、索引的创建
db.collection.createIndex({userid:1)} # 1表示升序 -1 表示降序
2、索引的查看
db.collection.getIndexes()
3、索引的删除
db.collection.dropIndex(name) # 根据名称删除
四、索引的使用
1、执行计划
分析查询的性能通常使用执行计划来查看查询执行的情况,如查询消耗的时间、是否基于索引查询
db.collection.find(query.options).explain(options)
2、涵盖的查询
当查询条件和查询的投影仅包含索引字段时,MongoDB直接从索引返回结果,而不扫描任何文档或将文档带入内存。这些覆盖的查询可以非常有效。