mongodb索引与优化

本文介绍了MongoDB中索引的基本概念及操作,包括基础索引、唯一索引的创建与管理,以及如何通过explain来优化索引。同时,还探讨了系统.indexes集合的用途,以及如何在不阻塞其他操作的情况下后台创建索引。
摘要由CSDN通过智能技术生成
一、基础索引
1、创建索引
db.test.ensureIndex({"username":1})
2、查询索引
db.test.getIndexes()
3、删除索引
db.test.dropIndex({"username":1})

-- 数字1表示username键的索引按升序存储,-1表示age键的索引按照降序方式存储。

4、复合索引
db.test.ensureIndex({"username":1, "age":-1})
该索引被创建后,基于username和age的查询将会用到该索引,或者是基于username的查询也会用到该索引,
但是只是基于age的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,
必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,
MongoDB可以智能的帮助我们调整该顺序
5、创建指定名称的索引
db.test.ensureIndex({"username":1},{"name":"testindex"})

二、唯一索引
db.test.ensureIndex({"userid":1},{"unique":true})
db.test.ensureIndex({"userid":1,"age":1},{"unique":true})
创建唯一索引,并消除重复数据。
db.test.ensureIndex({"userid":1},{"unique":true,"dropDups":true})

三、使用explain优化索引
db.test.find().explain()
{
"cursor" : "BasicCursor",
"nscanned" : 1,
"nscannedObjects" : 1,
"n" : 1,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {

}
}
explain会返回查询使用的索引情况,耗时和扫描文档数的统计信息。
"cursor":"BasicCursor"表示没有使用索引。
"nscanned":1 表示查询了多少个文档。
"n":1 表示返回的文档数量。
"millis":0 表示整个查询的耗时。

四、 索引管理
system.indexes集合中包含了每个索引的详细信息,因此可以通过下面的命令查询已经存在的索引,如:
db.system.indexes.find()
如果在为已有数据的文档创建索引时,可以执行下面的命令,以使MongoDB在后台创建索引,
这样的创建时就不会阻塞其他操作。但是相比而言,以阻塞方式创建索引,会使整个创建过程效率更高,
但是在创建时MongoDB将无法接收其他的操作。
db.test.ensureIndex({"username":1},{"background":true})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值