一、概述
索引通常能够极大地提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件,并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量数据时,查询可能要花费几十秒甚至几分钟,这对网站的性能是非常致命的,索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或者多列的值进行排序的一种结构。
二、原理
从根本上来说,MongoDB中的索引与其他数据库系统中的索引类似。MongoDB在集合层面上定义了索引,并支持对MongoDB集合中的任何字段或者文档的子字段进行索引。
三、索引操作
3.1、创建索引
# 语法
db.集合名称.createIndex(keys,options)
db.集合名称.createIndex({"title":1,"description":-1})说明:语法中的key值为你要创建的索引字段,1:升序创建索引、-1:降序创建索引
createIndex可接收的参数如下:
3.1.1、为user集合的name字段创建升序索引
# 案例:为user集合的name字段创建升序索引
db.user.createIndex({name:1})
3.1.2、为user集合的name字段创建带有过期时间的索引
3.1.3、创建复合索引
db.user.createIndex({name:1,age:-1},{name:'idx_name_age'})
3.2、查看索引
# 语法
db.集合名称.getIndexes()
3.2.1、查看user集合中的所有索引
# 案例:查询user集合中所有的索引
db.user.getIndexes()
3.2.2、查看集合索引的大小
# 语法:
db.集合名称.totalIndexSize()db.user.totalIndexSize()
3.3、删除索引
# 语法
# 删除所有索引(不包含_id索引)
db.集合名称.dropIndexes()
3.3.1、删除所有索引
# 案例:删除user集合中所有的索引
db.user.dropIndexes()
3.3.2、删除指定索引
# 语法:
db.集合名称.dropIndex("索引名称")# 案例:删除user集合中name为idx_name的索引
db.user.dropIndex('idx_name')