MongoDB的索引

  一、索引的概念

  相信大家对索引都不陌生,数据库的索引类似书籍的目录索引一样,有了索引,看书的时候就不用翻遍整本书,就可以根据目录页数直接跳转到目标内容,提高阅读和查询效率。数据库的索引也是如此,它的作用就是用来提升查询速度的,有了索引,MongoDB查询的时候就可以索引中找到条目后,直接跳转到目标collection的位置。

  二、默认索引

  检索系统索引时,可以发现,mongodb默认的为每个集合都建立了默认的"_id"索引,作为检索时参照的索引。即我们平时的find操作都是默认根据"_id"这个索引来查找的。

1
2
3
4
> db.system.indexes.find();
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "kaiye.c1", "name" : "_id_" }
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "kaiye.c2", "name" : "_id_" }
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "kaiye.c3", "name" : "_id_" }

  三、为什么要建自定义索引

    先往一集合c4中添加一百万条数据,后检索age=100的那条数据,并调用explain函数计算检索过程中信息,发现在无排序,无自定义索引的情况下,没查询一条数据,需要扫描一百万条数据,并且只是一个简单查询就耗费了546毫秒,这在大数据量的业务系统中是难以接受的。

    for(var i=0;i<1000000;i++){
      db.c4.insert({name:"diao",age:i})

    }

    

  四、自定义索引有无的对比

    首先为c4集合的name字段建立索引,关键字为ensureIndex,语法为db.c4.ensureIndex({age:1}),之后再执行查询age=100的操作,检索信息如下图

    此时可以发现,在为age字段建立索引后进行一次简单的查询,此时遍历的条数只有一条,并且耗时几乎为0,相比无索引的检索,效果可见一般。

    

   四、对索引的其他操作

     (1)查询索引的相关信息:db.集合.stats();

     (2)删除索引: db.集合.dropIndex({索引字段:1})

       删除集合,也会将集合中的索引全部删除

     (3)建立唯一索引:唯一索引的意思是,当某一字段被设置为唯一索引后,该字段在所在集合中,不允许有相同的值存在,即值是唯一的,比如以上案例,再插入age=100的一条文档,则会有报错信息出来了。

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

posted @   纪煜楷  阅读(1370)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示