什么是索引
索引是一种用来方便查询数据的 数据结构
B Tree就是一种常用的数据库索引数据结构,MongoDB采用 B 树做索引,索引创建在colletions 上。
我们可以在这个网站上直观的看到索引的效果
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
除了 B 树,平衡二叉树、红黑数、B + 树都可以用来做索引
mongodb 使用索引和不使用索引
-
MongoDB不使用索引的查询的时候,会先扫描所有的文档,再匹配符合条件的文档。
-
使用索引的查询,会通过索引找到文档,使用索引能够极大的提升查询效率
mongodb 中的索引
mongodb 中的索引与多种索引类型,梳理一下看看效果
索引类型 | 描述 | demo |
---|---|---|
单字段索引 | 在某一个特定的字段上建立索引 mongoDB 在 ID 上建立了唯一的单键索引,所以经常会使用 id 来进行查询; 在索引字段上进行精确匹配、排序以及范围查找都会使用此索引; |
创建一个倒序的索引 db.users. createIndex({age:-1}); |
复合索引 | 在多个特定的属性上建立索引 复合索引键的排序顺序,可以确定该索引是否可以支持排序操作; 在索引字段上进行精确匹配、排序以及范围查找都会使用此索引,但与索引的顺序 有关; 为了性能考虑,应删除存在与第一个键相同的单键索引 |
db.users. createIndex({username:1,age:-1,country:1}) |
多键索引 | 在数组的属性上建立索引 针对这个数组的任意值的查询都会定位到这个文档,既多个索引入口或者键值引用 同一个文档 |
db.users.createIndex({favorites.city:1}) |
空间索引 | 2 种平面几何的 2d 索引,球面几何的2dsphere索引 见后文详解 文本索引 支持在集合中搜索字符串内容 |
db.reviews.createIndex( { comments: “text” } ) |
Hash索引 | 不同于传统的B-树索引,哈希索引使用hash函数来创建索引 在索引字段上进行精确匹配,但不支持范围查询,不支持多键hash; Hash索引上的入口是均匀分布的,在分片集合中非常有用 |
db.users.createIndex({username : ‘hashed’}) |
如何使用索引
MongoDB 使用 createIndex()
方法来创建索引,createIndex()
方法基本语法格式是这样的
db.集合名.createIndex(keys, options)
- key
文档类型值为要创建的索引字段,1为指定按升序创建索引,-按降序来创建索引指定为-1。
- options
文档类型值 MongoDB 中提供了丰富的属性,比如 background
,是否后台构建索引,
数据量太大时构建索引消耗时间长,为了不影响业务,可以加上此参数
后