1. 索引索引支持查询的有效地提高效率。没有索引,MongoDB必须扫描集合的每个文档,以选择与查询语句匹配的文档。这种扫描效率很低,需要MongoDB处理大量的数据。 索引是特殊的数据结构,以易于遍历的形式存储数据集的一小部分。 索引存储特定字段或一组字段的值,按照索引中指定的字段值排序。 1.1 索引案例首先创建大量数据。 向集合中插入10万条文档。 for(i=0;i<100000;i++){ db.t1.insert({name:'test'+i, age:i}) } 然后进行数据查找性能分析。 查找姓名为'test10000'的文档。 db.t1.find({name:'test10000'}) 使用explain()命令进行查询性能分析。 db.t1.find({name:'test10000'}).explain('executionStats') 其中的executionStats下的executionTimeMillis表示整体查询时间,单位是毫秒。 性能分析结果如下:
然后我们创建索引。 1表示升序,-1表示降序。 db.集合.ensureIndex({属性:1}) 如 db.t1.ensureIndex({name:1}) 执行上面相同的查询,并进行查询性能分析。 db.t1.find({name:'test10000'}).explain('executionStats') 性能分析结果如下:
1.2 ensureIndex()方法创建索引,需要使用MongoDB的ensureIndex()方法。 语法: db.COLLECTION_NAME.ensureIndex({KEY:1}) 这里的key是要在其上创建索引的字段的名称。 ensureIndex()方法也接受选项列表(可选)。 以下是列表:
1.3 索引的命令建立唯一所有,实现唯一约束的功能。 db.t1.ensureIndex({"name":1},{"unique":true})
联合所有,对多个属性建立一个索引,按照find()出现的顺序。 db.t1.ensureIndex({name:1,age:1}) 查看文档所有索引。 db.t1.getIndexes() 查看集合索引大小。 db.t1.totalIndexSize() 删除索引。 db.ti.dropIndexes('索引名称') 删除集合所有索引。 db.t1.dropIndexes() |
|