文章目录
-
1. 索引概述
-
2. 索引的类型
-
-
2.1 单字段索引
-
2.2 复合索引
-
2.3 其他索引
-
-
2.3.1 地理空间索引(Geospatial Index)
-
2.3.2 文本索引(Text Indexes)
-
2.3.3 哈希索引(Hashed Indexes)
-
-
-
-
-
3. 索引相关操作
-
-
3.1 查看索引
-
3.2 创建索引
-
-
3.3.1 创建单字段索引
-
3.3.2 创建复合索引
-
3.3.3 创建文本索引
-
-
-
3.4 移除索引
-
-
3.4.1 移除指定索引
-
3.4.2 移除所有索引
-
-
-
-
-
4. 索引的使用
-
-
4.1 执行计划
-
4.2 执行计划中各个字段的含义
-
4.3 stage字段的取值及含义
-
4.4 覆盖查询
-
-
-
阅读本文前可以先阅读以下文章:
-
MongoDB快速入门(MongoDB简介、MongoDB的应用场景、MongoDB中的基本概念、MongoDB的数据类型、MongoDB的安装与部署、MongoDB的常用命令)
-
MongoDB的常用命令(数据库操作、集合操作、文档操作)
1. 索引概述
MongoDB 索引的官网文档:索引-MongoDB手册
索引支持在 MongoDB 中高效执行查询。如果没有索引,MongoDB 就必须扫描集合中的每个文档以返回查询结果。如果查询存在适当的索引,MongoDB 就可以使用该索引来限制其必须扫描的文档数
索引可提高查询性能,但添加索引会影响写入操作的性能。对于写入读取率高的集合,由于每次插入操作都必须同时更新所有索引,因此会带来较高的索引成本
MongoDB 索引使用 B-Tree 数据结构(MySQL 是 B+Tree)
2. 索引的类型
2.1 单字段索引
MongoDB 支持在文档的单个字段上创建用户定义的升序索引或降序索引,称为单字段索引(Single Field Index)
对于单个字段索引和排序操作,索引键的排序顺序(即升序或降序)并不重要,因为 MongoDB 可以在任何方向上遍历索引
2.2 复合索引
MongoDB 支持多个字段的自定义索引,即复合索引(Compound Index)
复合索引中列出的字段顺序具有重要意义。例如,如果复合索引由 { user_id: 1, score: -1 } 组成,则索引首先会按 user_id 正序排序,然后在每个 user_id 的值内,再按 score 倒序排序
2.3 其他索引
2.3.1 地理空间索引(Geospatial Index)
为了支持对地理空间坐标数据的有效查询,MongoDB 提供了两种特殊的索引:返回结果时使用平面几何的二维索引和返回结果时使用球面几何的二维球面索引
2.3.2 文本索引(Text Indexes)
文本索引的特点:
-
分词:MongoDB 在创建文本索引时会对字段内容进行分词处理,将文本分解成单词或术语(tokens)
-
权重:可以为不同的字段指定不同的权重,以便在搜索时影响文档的相关性得分
-
停用词:MongoDB 会忽略某些常用词(如 “the”、“and” 等),这些词被称为停用词。MongoDB 有一个内置的停用词列表,也可以自定义停用词列表
-
语言支持:MongoDB 的文本索引支持多种语言的分词和搜索
注意事项:
-
文本索引不存储停止词和词干。这意味着它们不会影响索引的大小
-
文本索引不能用于文本字段中的二进制数据
-
文本索引不能用于数组字段中的字符串元素
-
$text
查询不能与$
或$$
运算符一起使用
2.3.3 哈希索引(Hashed Indexes)
为了支持基于散列的分片,MongoDB 提供了散