1. 索引简介

索引:建立在表格之上,提供一个能够更快的定位到数据的方法

1、通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录
2、可以加快查询,但是同时降低了修改插入等性能
3、是特殊的数据结构,索引是对数据库表中一列或多列的值进行排序的一种结构
4、默认是用btree来组织索引文件

默认情况下,在建立集合的同时,MongoDB数据库自动为集合_id建立唯一索引,可以避免重复插入同一_id值的文档记录。

2. 创建索引:
命令格式:db.collection.createIndex( < keys >,< options> )
keys:是键值对,是创建索引的名称及排序方式,1 代表按升序排列;-1 代表按降序排列。
例:按age字段创建升序索引

  • db.person.createIndex({age:1})
  • options:可选参数,表示建立索引的设置。可选值如下:
  • MongoDB会自动创建索引吗 mongodb创建索引命令_mongodb

  • 3.使用索引需注意:
  • 随着数据量的不断增长,当需要为某个集合增加索引时,会发现此时创建索引会很费力,同时也很消耗性能。
  • 创建索引时MongoDB默认是阻塞式,阻塞会让索引建立得更快,任何此期间的请求将不能响应。
  • 设置{“background“:true}选项,在后台完成,同时也可以正常处理请求。

4.唯一索引
语法如下:
db.collection.createIndex(索引名称或索引文档, {unique:true})

例如,如果想保证文档的“name”键都有不一样的值,创建一个唯一索引:
db.people.createIndex({“name”:-1},{unique:true}
即:people集合中创建按name键的值降序排列的唯一索引

4.1 消除重复

例如,删除"name"键重复的索引值:
db.people.createIndex({“name”:1},{“unique”:true,“dropDups”:true}})


4.2 复合索引:建立在多个字段上的索引

例如:在age和name字段建立复合索引
db.person.createIndex({“age”:1,“name”:1})

4.3 复合唯一索引:
db.person.createIndex({“age”:1,“name”:1},{“unique”:true})

4.4 查询索引
查看集合的所有索引: db.集合名.getIndexes()
查询索引大小:db.集合名.totalIndexSize() (即索引所占空间大小)

4.5 修改索引
先删除旧有的索引,再创建新的索引。
主要有两种方式:
1、会删除当前集合中的所有索引(_id上的默认索引除外)。
db.集合名.dropIndexes()

2、可以根据指定的索引名称或索引文档删除索引(_id上的默认索引除外)。
db.集合名.dropIndex(index)
例:删除刚才创建的age索引:db.person.dropIndex({age:1})