索引
索引就是用来加速查询的。数据库索引与书籍的索引类似:有了索引就不需要翻遍整本书,数据库则可以直接在索引中查找,使得查找速度能提高几个数量级。在索引中找到条目以后,就可以直接跳转到目标文档的位置。
- 创建普通索引,使用命令
db.collection.ensureIndex({key:1})
- 查看关于索引的相关信息,使用命令
db.collection.stats()
- 查看查询使用索引的情况,使用命令
db.collection.find({key:value}).explain()
- 删除索引,使用命令
db.collection.dropIndex({key:1})
- 删除集合,也会将集合中的索引全部删除
- 创建唯一索引,使用命令
db.collection.ensureIndex({key:1},{unique:true})
- 查看关于索引的相关信息,使用命令
db.collection.stats()
- 查看查询使用索引的情况,使用命令
db.collection.find({key:value}).explain()
- 删除索引,使用命令
db.collection.dropIndex({key:1})
- 删除集合,也会将集合中的索引全部删除
创建简单索引
数据准备index.js
for(var i = 0 ; i<200000 ;i++){
db.books.insert({number:i,name:i+"book"})
}
- 先检验一下查询性能
var start = new Date()
db.books.find({number:65871})
var end = new Date()
end - start
- 为number 创建索引
db.books.ensureIndex({number:1})
- 再执行第一部的代码可以看出有数量级的性能提升
索引使用需要注意的地方
- 创建索引的时候注意1是正序创建索引-1是倒序创建索引
- 索引的创建在提高查询性能的同事会影响插入的性能
对于经常查询少插入的文档可以考虑用索引 - 符合索引要注意索引的先后顺序
- 每个键全建立索引不一定就能提高性能呢
索引不是万能的 - 在做排序工作的时候如果是超大数据量也可以考虑加上索引
用来提高排序的性能