主页

索引

模块索引

搜索页面

常用

索引类型:

1. 单键索引
2. 复合索引
3. 多键索引
4. 地理空间索引
5. 全文索引
6. 哈希索引
7. 模糊索引 (Wildcard Index),一种基于匹配规则的灵活式索引,在 4.2 版本开始引入

索引属性:

1. 唯一索引
2. 稀疏索引(Sparse Indexes)
3. 局部索引(Partial Indexes)
4. TTL索引

索引的优点:

1. 减少数据扫描:避免全表扫描代价
2. 减少内存计算:避免分组排序计算
3. 提供数据约束:唯一和时间约束性

索引的缺点:

1. 增加容量消耗:创建时需额外存储索引数据
2. 增加修改代价:增删改都需要维护索引数据
3. 索引依赖内存:会占用极其宝贵的内存资源

索引类型详解

一、单键索引:

在一个键上创建的索引就是单键索引,单键索引是最常见的索引,如MongoDB默认创建的_id的索引就是单键索引。

二、复合索引:

在多个键上建立的索引就是复合索引

三、多键索引:

如果在一个值为数组的字段上面创建索引, MongoDB会自己决定,是否要把这个索引建成多键索引

四、地理空间索引:

MongoDB支持几种类型的地理空间索引。
其中最常用的是 2dsphere 索引用于地球表面类型的地图和 2d 索引用于平面地图和时间连续的数据

五、全文索引:

全文索引用于在文档中搜索文本,我们也可以使用正则表达式来查询字符串
但是当文本块比较大的时候,正则表达式搜索会非常慢,而且无法处理语言理解的问题如 entry 和 entries 应该算是匹配的。
使用全文索引可以非常快地进行文本搜索,就如同内置了多种语言分词机制的支持一样。
创建索引的开销都比较大,全文索引的开销更大。创建索引时,需后台或离线创建

六、哈希索引:

哈希索引可以支持相等查询,但是 哈希 索引不支持范围查询。
您可能无法创建一个带有 哈希 索引键的复合索引或者对 哈希 索引施加唯一性的限制。
但是,您可以在同一个键上同时创建一个 哈希 索引和一个递增/递减(例如,非哈希)的索引,
这样MongoDB对于范围查询就会自动使用非哈希的索引

索引属性选项配置

一)options全局选项(适用于所有索引):

1. background  Boolean
   建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。
   “background” 默认值为false。
2. unique  Boolean
   建立的索引是否唯一。指定为true创建唯一索引。
   默认值为false.
3. name  string  索引的名称
   如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
   不能超过128字符
4. partialFilterExpression Document
   设定索引只对满足条件的文档起作用 具体见官网对Partial Indexes
5. sparse  Boolean
   对文档中不存在的字段数据不启用索引;
   这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.
   默认值为 false.
6. expireAfterSeconds  integer
   指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
7. storageEngine Document
   允许用户在创建索引时指定每一个索引的配置

二)全文文本索引选项:

参数名 类型  描述
weights document  设置文本索引字段的权重,权重值1- 99,999
default_language  设置文本分词的语言,默认为english,其他支持语言
language_override string  使用文档中的一个字段的值作为设置文本分词的语言,默认为language,例子
textIndexVersion  integer 版本号,可以是1或2

注意事项

创建索引,需要考虑的问题:

每个索引至少需要数据空间为8kb
添加索引会对写入操作会产生一些性能影响
对于具有高写入率的集合Collections,索引很昂贵,因为每个插入也必须更新任何索引
索引对于具有高读取率的集合Collections很有利,不会影响没索引查询
处于索引处于action状态时,每个索引都会占用磁盘空间和内存,因此需要对这种情况进行跟踪检测

索引限制:

索引名称长度不能超过128字段
复合索引不能超过32个属性
每个集合Collection不能超过64个索引
不同类型索引还具有各自的限制条件

MongoDB度量标准(@tovalidate):

metrics.queryExecutor.scanned
在查询和查询计划评估期间扫描的索引项的总数

metrics.operation.scanAndOrder
返回无法使用索引执行排序操作的已排序数字的查询总数

collStats.totalIndexSize
所有索引的总大小。 scale参数会影响此值。
如果索引使用前缀压缩这是WiredTiger的默认值,则返回的大小将反映计算总计时任何此类索引的压缩大小。

collStats.indexSizes
指定集合collection上每个现有索引的键和大小。 scale参数会影响此值

dbStats.indexes
包含数据库中所有集合的索引总数的计数。

dbStats.indexSize
在此数据库上创建的所有索引的总大小

参考

主页

索引

模块索引

搜索页面