下面是自己之前学习的简单记录和整理。

一、MongoDB 索引

我们知道索引是用来提高查询速度的,因为在没有索引的情况下,MongoDB在读取数据时必须扫描集合中每一个文件来找到符合查询条件的结果,这样效率是非常低的,尤其是在处理大量数据时,要花费更多时间,这样非常影响性能,所以可以用索引。

不过索引在提高查询速度的同时,也降低写入速度,我们可以权衡常用的查询字段,来合适地建立索引。

MongoDB 中,索引可以按字段升序/降序来创建,便于排序。

索引类型可分为单键索引、复合索引、文本索引、哈希索引、子文档索引等等。

更多阅读:MongoDB索引原理  

               MongoDB中文社区

二、MongoDB索引基本命令操作

为了测试先在myTest库下,创建一个users集合,插入一些数据:

use myTest
for(var i = 1; i<50; i++){
	db.users.insert({'name':'yuan'+i,'userId':i,'money':i*100})
}

db.users.find().count()查看一下users集合中记录总条数,已经有49条了。

1、创建普通的单键索引

db.users.createIndex({"money":-1})  //1 - 升序  -1 - 降序
2、查看当前集合索引状态
db.users.getIndexes()


能查看到users集合中的所有索引,有2个索引,一个_id默认的索引,另一个是money。

3、查看集合索引大小

db.users.totalIndexSize()

4、删除集合的所有索引

db.users.dropIndexes()
5、删除集合的指定索引
db.users.dropIndex("索引名称")
或者
db.users.dropIndex({'money':-1})
6、创建复合索引
db.users.createIndex({"money":-1,'name':1})
7、创建子文档索引
db.users.createIndex({"filed.subfield":-1})
8、创建索引后,检索集合的字段
db.users.find({"money":2000.0})
9、查询计划
db.users.find({"money":2000.0}).explain()
我们可以通过详细的查询计划来分析做优化。


更多索引的操作方法:http://www.mongoing.com/docs/reference/indexes.html

更多查询计划的内容:http://www.mongoing.com/docs/tutorial/measure-index-use.html