MongoDB--Mongodb 中索引

本文详细介绍了MongoDB中的索引类型,包括普通单列索引、复合索引、子文档索引、唯一索引,并提供了创建、查看和删除索引的方法。强调了索引对查询性能的提升以及在插入性能上的权衡,还提到了复合索引顺序的重要性以及索引使用注意事项。同时,展示了如何通过explain()方法检查查询性能。
摘要由CSDN通过智能技术生成

七、Mongodb 中索引

1、普通单列索引

测试代码:

> for(var i=0;i<200000;i++){ 
... db.java.insert({name:'xiao'+i,age:i}) 
... } 

第一:先检验一下查询性能
var start = new Date()
db.java.find({name:‘xiao156789’})
var end = new Date()
end-start
第二:为name创建索引
db.java.ensureIndex({name:1})
第三:再执行第一部分代码可以看出有数量级的性能提升
没有添加索引时使用时间是;

在这里插入图片描述
添加索引

在这里插入图片描述
添加完成后,再次查询

在这里插入图片描述

语法:
db.集合名.ensureIndex({键名:1}) 1是升续 -1是降续

2、多列索引(复合索引)

创建多列索引
db.集合名.ensureIndex({field1:1/-1, field2:1/-1});
对name和age 建立一个复合索引

在这里插入图片描述

可以使用db.集合名.getIndexes()查看创建的索引情况。

在这里插入图片描述

3、子文档索引

语法:
db.集合名.ensureIndex({filed.subfield:1/-1});
如下文档可以建立子文档索引
{name:’诺基亚手机1’,price:12.34,spc:{weight:100,area:’纽约’}}
{name:’诺基亚手机2’,price:42.34,spc:{weight:200,area:’伦敦’}}
比如要查询weight等于100的文档。
db.goods.find({‘spc.weight’:100})

在这里插入图片描述

根据当前案例,我们建立子文档索引
db.net.ensureIndex({‘spc.w’:1})

在这里插入图片描述

4、唯一索引

语法:
db.集合名.ensureIndex({name:-1},{unique:true})

在这里插入图片描述
在这里插入图片描述

5、查看索引

常用命令:
(1)查看当前索引状态: db.集合名.getIndexes();

在这里插入图片描述

(2)详情查看本次查询使用哪个索引和查询数据的状态信息。
db.集合名.find({name:’xiao’}).explain()

在这里插入图片描述
在这里插入图片描述

6、删除索引

删除单个索引
db.集合名.dropIndex({filed:1/-1});

在这里插入图片描述

删除所有索引
db.集合名.dropIndexes();

7、重建索引

一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.
可以通过索引的重建,减少索引文件碎片,并提高索引的效率.
类似mysql中的optimize table
mysql里面使用optimize table语法:optimize table 表名
语法:db.集合名.reIndex()

在这里插入图片描述

8、索引使用注意事项

(1)创建索引的时候,注意1是正序创建索引 -1是倒叙创建索引
(2)索引的创建在提高查询性能的同时会影响插入性能,对于经常查询少插入的文档可以考虑用索引
(3)复合索引要注意索引的先后顺序。
(4)每个键全建立索引不一定就能提高性能,索引不是万能的。
(5)在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值