开发者学堂课程【MongoDB精讲课程(上):索引的概述和类型】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/726/detail/12961
索引的概述和类型
内容介绍
一、概述
二、类型
一、概述
索引支持在 MongoDB 中高效地执行查询。如果没有索引,_ MongoDB 必须执行全集合扫描,即扫描集合中的每个文档,以选择与查词语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,査询可能要花费十秒甚至几分钟,这对网站的性能是非常致命的。
如果查询存在适当的索引, MongoDB 可以使用该索引限制必须检查的文档数。
索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。索引存储特定字段或一组字段的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作。此外, MongoDB 还可以使用索引中的排序返回排序结果。
官网文档:https://docs.mongodb.com/manual/indexes/
了解: MongoDB 索引使用 B 树数据结构(确切的说是 B-Tree , MySQL 是 B+Tree )
二、类型
1、单字段索引
MongoDB 支持在文档的单个字段上创建用户定义的升序/降序索引.称为单字段索引 ( Single Field Index )。
对于单个字段索引和排序操作,索引键的排序顺序(即升序或降序)并不重要,因为 MongoDB 可以在任何方向上遍历索引。
2、复合索引
MongoDB 还支持多个字段的用户定义索引,即复合索引( Compound Index )。当查询条件较多,又想提升查询性能时,通常用复合索引。
复合索引中列出的字段顺序具有重要意义。例如,如果复合索引由{userid :1, score :-1}组成,则索引首先按 userid 正序排序,然后在每个 userid 的值内,再在按 score 倒序排序。
3、其他索引
地理空间索引(Geospatial Index )、文本索引(Text Indexes )、哈希索引(Hashed Indexes )。
(1)地理空间索引( Geospatial Index )
为了支持对地理空间坐标数据的有效查询, MongoDB 提供了两种特殊的索引:返回结果时使用平面几何的二维索引和返回结果时使用球面几何的二维球面索引。
(2)文本索引( Text Indexes )
MongoDB 提供了一种文本索引类型,支持在集合中搜索字符串内容。这些文本索引不存储特定于语言的停止词(例如 “the ”、“ a ”、“ or ”),而将集合中的词作为词干,只存储根词。但是文本索引的性能不高,正式使用时一般还需借用 ES 等成熟的搜索引擎。
(3)哈希索引( Hashed Indexes )
为了支持基于散列的分片, MongoD 提供了散列索引类型,它对字段值的散列进行索引。这些索引在其范围内的值分布更加随机,但只支持相等匹配,不支持基于范围的查询。哈希索引不需要特别设置,当做分片时,内部的有算法会自动进行哈希索引。