• 索引查询学通MongoDB——第四天 索引操作


    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

        这些天项目改版,间时比拟紧,博客也就没跟得上,还望大家包涵。

        好,明天分享下mongodb中关于索引的基本作操,我们平常做开辟都避免不了要对序程行进能性优化,而序程的作操不过就是CURD,平日我们

        又会费花50%的间时在R面上,因为Read作操对用户来讲是非常敏感的,理处好不就会被人鄙弃,呵呵。

        从算法上来讲有5种经典的查找,体具的可以见参我的算法速成系列,这其中就包含我们明天所说的“索引查找”,如果大家对sqlserver比拟懂得

        的话,相信索引查找能给我们带来什么样的能性晋升吧。

       我们首先入插10w数据,上图话说:

        

        一:能性分析数函(explain)

        好了,数据已入插功成,既然我们要做分析,确定要有分析的工具,好幸mongodb中给我们供提了一个关键字叫做“explain",那么怎么用呢?

        还是看图,意注,这里的name字段没有立建任何索引,这里我就查询一个“name10000”的姓名。

        

     仔细看色红域区,有几个我们关怀的key。

       cursor:       这里现出的是”BasicCursor",什么意思呢,就是说这里的查找采取的是“表扫描”,也就是次序查找,很悲催啊。

       nscanned:  这里是10w,也就是说数据库浏览了10w个文档,很恐惧吧,这样玩的话让人受不了啊。

       n:             这里是1,也就是终最返回了1个文档。

       millis:        这个就是我们最最最....关怀的货色,共总耗时114毫秒。 

        二:立建索引(ensureIndex)

         在10w条这么简略的集合中查找一个文档要114毫秒有一点点让人不能收接,好,那么我们该如何优化呢?mongodb中给

        我们带来了索引查找,看看能不能让我们的查询一飞冲天.....

         

      这里我们应用了ensureIndex在name上立建了索引。”1“:示表按照name行进升序,”-1“:示表按照name行进降序。

        我的神啊,再来看看这些敏感信息。

       cursor:       这里现出的是”BtreeCursor",这么牛X,mongodb采取B树的结构来放存索引,索引名为面后的“name_1"。

       nscanned:  我擦,数据库只浏览了一个文档就OK了。

       n:             直接位定返回。

       millis:        看看这个间时真的不敢相信,秒秒杀。

        通过这个例子相信大家对索引也有了感官方面的识认了吧。

        三:一唯索引

        每日一道理
    喜马拉雅直冲霄汉,可面上有攀爬者的旗帜;撒哈拉沙漠一望无垠,可里面有跋涉者的脚印;阿尔卑斯山壁立千仞,可其中有探险者的身影;雅鲁藏布江湍急浩荡,可其中有勇敢者的故事。

         和sqlserver一样都可以立建一唯索引,重复的键值天然就不能入插,在mongodb中的应用法方是:

        db.person.ensureIndex({"name":1},{"unique":true})。

        

        四:合组索引

         有时候我们的查询不是单条件的,是能可多条件,比如查找出生在‘1989-3-2’名字叫‘jack’的学同,那么我们可以立建“姓名”和"日生“

        的合联索引来速加查询。

        

        看到上图,大家或者也晓得name跟birthday的不同,立建的索引也不同,升序和降序的次序不同都市发生不同的索引,

        那么我们可以用getindexes来查看下person集合中到底生成了那些索引。

        

        此时我们确定很猎奇,到底查询优化器会应用哪个查询作为作操,呵呵,还是看看效果图:

        

        看完上图我们要相信查询优化器,它给我们做出的选择往往是最优的,因为我们做查询时,查询优化器会应用我们立建的这些索引来建创查询计划,

        如果某一个先行执完则其他查询计划被close失落,种这计划会被mongodb保存起来,当然如果非要用自己指定的查询计划,这也是

        可以的,在mongodb中给我们供提了hint法方让我们可以暴力行执。

        

        五: 删除索引

         可能随着业务需求的化变,先原立建的索引可能没有存在的必要了,可能有的人想说没必要就没必要呗,但是请记着,索引会低降CUD这三

        种作操的能性,因为这玩意须要实时维护,所以啥问题都要综合考虑一下,这里就把刚才立建的索引清空失落来演示一下:dropIndexes的应用。

        

    文章结束给大家分享下程序员的一些笑话语录: 警告
    有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
    小伙子说,“没事儿,我是一个程序员”。
    那妇女说,“这又怎样?”
    程序员说,“我们从来不关心 Warning,只关心 Error”

  • 相关阅读:
    mongodb 数据库操作--备份 还原 导出 导入
    括号匹配算法求解(用栈实现)
    最短路径(图中两点间最短路径)
    城市之间的最短总距离(最小生成树算法)
    简单的约瑟夫环算法
    动态数组排序实例
    折半查找算法
    对字符串进行快速排序(即字符数组排序)
    字符串数组排序的快速排序实现
    插入排序反序排序
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3052997.html
Copyright © 2020-2023  润新知