Mongodb索引
注意事项:
索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引
查看查询计划
db.find(query).explain();
常见的stage
COLLSCAN全表扫描
IXSCAN索引扫描
FETCH根据索引去检索指定document
SHARD_MERGE将各个分片返回数据进行merge
常用命令:
可以使用db.collection.help()命令查看针对collection操作的命令行
查看当前索引状态: db.collection.getIndexes();
创建普通的单列索引:db.collection.ensureIndex({field:1/-1}); 1是升续 2是降续
删除单个索引:db.collection.dropIndex({filed:1/-1});
删除所有索引:db.collection.dropIndexes();
创建多列索引:db.collection.ensureIndex({field1:1/-1,field2:1/-1});
创建子文档索引:db.collection.ensureIndex({filed.subfield:1/-1});
创建唯一索引:db.collection.ensureIndex({filed.subfield:1/-1},{unique:true});
创建稀疏索引: db.collection.ensureIndex({field:1/-1},{sparse:true});
稀疏索引的特点------如果针对field做索引,针对不含field列的文档,将不建立索引.与之相对,普通索引,会把该文档的field列的值认为NULL,并建索引.适宜于: 小部分文档含有某列时.
创建哈希索引: db.collection.ensureIndex({file:’hashed’});
哈希索引速度比普通索引快,但是,无能对范围查询进行优化.适宜随机性强的散列
重建索引:db.collection.reIndex()
一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.可以通过索引的重建,减少索引文件碎片,并提高索引的效率.类似mysql中的optimize table