一、索引基础
索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快。MongoDb的索引几乎与传统的关系型数据库一摸一样,这其中也包括一些基本的查询优化技巧。
- 创建索引的命令:
注意在 3.0.0 版本前创建索引方法为
db.collection.ensureIndex()
,之后的版本使用了db.collection.createIndex()
方法,ensureIndex() 还能用,但只是 createIndex() 的别名。db.user.createIndex({"username": 1})
这里的1代表的是排序
- 获取索引的命令
db.user.getIndexes()
- 删除索引的命令
db.user.dropIndex({"username":1})
- explain executionStats查询具体的执行时间
db.user.find().explain("executionStats")
二、复合索引
db.user.ensureIndex({"username":1,"age":-1})
该索引被创建后,基于username和age的查询将会用到该索引,或者是基于username的查询也会用到该索引,但是只是基于age的查询将不会用到该索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDb可以智能的帮助我们调整该顺序,一遍是符合索引可以为查询所用。例如:db.user.find({"age":30,"username":"zhangsan"})
三、唯一索引
唯一索引就是创建索引的字段的值不能重复。
db.user.ensureIndex({"username":1},{"unique":true})