1.【普通单列索引】
先创建20W条数据,测试查询性能
for(var i=0;i<200000;i++){
db.java.insert({"name":"xiao"+i,"age":i})
}
var start = new Date()
db.java(集合名).find({"name":"xiao186789"})
var end = new Date()
end-start
为字段"name"创建索引
db.java(集合名).ensureIndex({"name":1})【1:升序,-1:降序】
2.【多列索引,复合索引】
db.java(集合名).ensureIndex({"name":1,"age":-1})
3.【子文档索引】
{name:手机,price:12.6,spc:{weight:100,desc:phone}}
db.java(集合名).ensureIndex({"spc.weight":1})
4.【唯一索引】
db.java(集合名).ensureIndex({name:1},{unique:true})
5.【查看索引】
db.java(集合名).getIndexes()
db.java(集合名).find().explain("executionStats")
主要关注:executionTimeMillis的值(单位:毫秒)
6.【删除索引】
删除单个
db.java(集合名).dropIndex({name:1})
删除所有
db.java(集合名).dropIndexes()
注意:在删除所有的索引时,主键索引会保留
7.【重建索引】
一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此。
可以通过索引的重建,减少索引文件碎片,并提高索引的效率。
类似mysql中的optimize table
mysql里面使用optimize table 语法:optimize table 表名
语法:db.java(集合名).reIndex()
8.【索引使用注意事项】
(1)索引的创建在提高查询性能的同时会影响插入性能,对于多读少写的文档可以考虑使用索引
(2)复合索引要注意索引的先后顺序
(3)每个key都建立索引不一定就能提高性能,索引不是万能的
(4)在做排序工作的时候如果是超大数据量,也可以考虑加上索引用来提高排序的性能