MongoDB-索引

指建立指定键值及所在文档存储位置的对照清单,使用索引可以方便我们进行快速查找,减少遍历次数提高查找效率

指建立指定键值及所在文档存储位置的对照清单,使用索引可以方便我们进行快速查找,减少遍历次数提高查找效率

ensureIndex()
功能 : 创建索引
参数 : 索引域和索引选项

e.g. 根据name域创建索引
db.class0.ensureIndex({name:1})

  • 1表示正序索引 -1表示逆序索引

查看集合中索引

db.collection.getIndexes()

自定义索引名称
db.collection.ensureIndex({},{name:’myIndex’})

e.g. 对age域创建索引命名ageIndex
db.class0.ensureIndex({age:1},{name:’ageIndex’})

删除索引

db.collection.dropIndex(“index”)
功能:删除索引
参数: 要删除的索引名称或者键值对

e.g.
db.class0.dropIndex({name:1})
db.class0.dropIndex(‘ageIndex’)

db.collection.dropIndexes()
功能:删除所有索引

  • _id是系统自动创建的主键索引,不能删除

索引类型

复合索引
根据多个域创建一个索引

e.g.
db.class0.ensureIndex({name:1,age:-1},{name:’name_age’})

数组索引 ,子文档索引
如果对某个域的值为数组或者子文档的域创建索引,那么通过数组或者子文档中某一项进行查找也是索引查找

e.g. 如果对score创建了索引那么该查找就是索引查找
db.class1.find({‘score.1’:88})

唯一索引
创建索引的域要求值不能够重复

e.g.  对name创建唯一索引
db.class0.ensureIndex({name:1},{unique:true})
  • 当对某个域创建了唯一索引就不能插入重复的值

稀疏索引(间隙索引)
只针对有指定索引域的文档创建索引,没有该域的文档不会插入到索引表

e.g. 只对有age域的文档创建索引
db.class0.ensureIndex({age:1},{sparse:true})

索引约束

  • 索引表需要占用一定的数据库磁盘空间
  • 当对数据进行增 删 改等写入操作时索引也需要更新,降低了数据修改的

综上 : 数据量较小时不适合创建索引,当数据库进行频繁的修改操作而不是查找操作时也不适合创建索引。针对一个集合并不是创建索引越多越好。