常用 #### 索引类型:: 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 在此数据库上创建的所有索引的总大小 参考 ==== * https://blog.csdn.net/LOUISLIAOXH/article/details/51543552 * https://juejin.im/post/5d41924f5188255d5102e1fd