### 索引创建的注意事项
> 当如果数据量比较大时,最好使用后端方式进行创建,不然会阻塞mongodb的读写操作,就很悲剧了。
> db.col.createIndex({"filed":1}, {background:true});
### 索引的性能检查
> db.col."sql".explain("executionStats");
> 结果中:
> winningPlan:最佳匹配的索引。
> docsExamined:1000,检查了1000个文档
> nReturned:13,匹配到了13个文档
> executionTimeMillis:当前查询所需时间,毫秒数
> indexBounds:当前查询具体使用的索引
### 索引的管理
> 查询所有索引
```
db.col.getIndexes()
```
> 删除所有索引
```
db.col.dropIndexes()
```
> 删除 firstname 索引
```
db.col.dropIndex({"firstname": 1})
```
### 索引的分类
#### 1. 单键索引
> 索引创建:db.col.createIndex({"filed":1 or -1})
> 查询语句:do.col.find({"field":"wangkun"})
> 1为升序,-1 为降序
#### 2. 唯一索引
> 当插入相同的值时候会报错,以保证数据的唯一性
> 索引创建:db.col.ensureIndex({"field": 1}, {unique: true});
> 查询语句:do.col.find({"field":"wangkun"})
#### 3. 复合索引
> 索引创建:db.col.createIndex({"field1":1,"field2":-1})
> 查询语句:db.col.find({"field1":"value","field2":"value"})
> 可以用field1做前缀进行查询
> 也可以用field1 + field2 进行查询
> 切勿使用field2 + field1 进行查询
#### 4. 多键值索引
> 索引创建:db.col.createIndex({"array filed":1 or -1})
> 查询语句:do.col.find({"array field":122})
#### 5. HASH索引
> 索引创建:db.col.createIndex({"filed":"hashed"})
> 查询语句:do.col.find({"field":"wangxi"})
> 定值查找,o(1) 时间消耗
#### 6. 局部索引
> 局部索引可以 节约存储空间 和 性能消耗。
> 比如 年龄大于10岁的数据都进行索引
> 索引创建:db.col.createIndex({"age":1}, {partialFilterExpression:{"age":{$gt:10}}}})
> 查询语句:do.col.find({"age":22})