索引查询学通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”

posted @ 2013-05-01 12:06  坚固66  阅读(157)  评论(0编辑  收藏  举报