2、MongoDB学习之索引的管理
目标:实现索引的创建、查询、删除、explan管理等操作
环境:
> db.version()
3.4.7
索引创建满足的基本需求:
1;索引提高查询速度
2;在mongodb中,索引可以按自动列升序/降序来创建,便于排序
3;默认是用btree来组织索引文件,2.4版本以后,也允许建立hash索引
管理索引常用到的语法有:
db.c1.createIndex(keypattern[,options]) #keypattern表示索引匹配的字段列,例如name:1 表示那么列升序建立索引,[,options]表示使用另一个字段列创建索引,从而组成复合索引
db.c1.getIndexes() #查看索引的语法,当还没有手动创建索引的时候,其实系统默认也会有索引列:_id_
db.c1.find({name:'test10'}).explain() #表示查询name列集合集值test10是否有创建索引
一、索引的创建
常规的索引创建方式有基本索引、复合索引、唯一索引三类。1、基本索引
> db.c1.createIndex({newname:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
#由上可以看出创建了一个基本的单列索引
2、复合索引的创建
> db.c1.createIndex({newname:1,age:-1})
3、唯一索引的创建
唯一索引的主要功能就是只允许字段值唯一
常用语法为:
db.c1.ensureIndex(keypattern[,options]) - DEPRECATED, use createIndex() instead
> db.c1.ensureIndex({num:1},{unique:true})
成功示例
二、索引的查看
> db.c1.getIndexes()
1;查看基本索引
2;查看复合索引
3;查看唯一索引
三、explan索引验证
创建索引主要是供加快查询速度的,基本索引创建之后,基于该列查询会加快速度。复合索引一般是由两个或者多个列做成索引值,如果是单列条件查询的话,最开始创建的字段列能够有效(也就是说复合索引创建后,程序单列查询会有索引效果),但是之后的字段列的索引查询是没有效果的。如果复合索引里面用到的查询条件都是创建的复合索引时的列,字段条件查询时变换位置也没关系
使用方法:
> db.c1.find({newname:'test5'},{age:5}).explain()
#可以看到它的一个复合查询
四、索引的删除
常用的语法:
db.c1.dropIndex(index)
> db.c1.dropIndex({age:-1})
{ "nIndexesWas" : 6, "ok" : 1 }
> db.c1.dropIndex({num:1})
{ "nIndexesWas" : 5, "ok" : 1 }
> db.c1.dropIndex({name:1,age:-1})
{ "nIndexesWas" : 4, "ok" : 1 }