众所众知索引在数据库查询中起到举足轻重的作用,它可以加快查询的速度。现在我就来说一下非关系型数据库MongoDB里面的索引管理。首先不管是关系型数据库还是非关系型数据库,索引在数据量庞大的时候才能体现出来,所以我先建一个数据量稍微大一点集合,截图如下:
在c2集合里面添加了100条数据(感觉数据还是很少)。
首先我们不使用索引才查询,使用命令db.集合名.find({age:***})用age条件来查,截图如下:
使用explain函数来查询一下时间,截图如下:
我来解释一下这里面的一些属性,nscannedObject:99说明查询的时候扫描了99条数据,也就是说把整个集合给全部扫描了一遍。至于这里的millis:0我认为是当时给集合里面添加数据的时候虽然添加了100条,但还是太少了,而且这里显示没有创建索引。
接下来我们添加一个普通索引,使用命令db.集合名.ensureIndex({age:1}),截图如下:
添加成功后,我们再来查询一下,截图如下:
现在和上面形成了鲜明的对比。这里使用了普通的索引,所以nscannedObjects:1,说明只扫描了一条数据.
接下来我来讲一下创建唯一索引,创建唯一索引之前,要先把之前的索引删除了,使用命令db.集合名.dropIndex({条件}),截图如下:
删除之前的那个普通索引之后,使用命令db.集合名.ensureIndex({age:***},{unique:true})用age条件来创建唯一索引,截图如下:
添加唯一索引成功之后,再来查询一下,截图如下:
感觉好像和之前的普通索引查询效果一样。
但是添加唯一索引之后,就不能添加和age=20相同的记录了,否则报错,截图如下: