北京快三开奖

  • <tr id="U9YkSO"><strong id="U9YkSO"></strong><small id="U9YkSO"></small><button id="U9YkSO"></button><li id="U9YkSO"><noscript id="U9YkSO"><big id="U9YkSO"></big><dt id="U9YkSO"></dt></noscript></li></tr><ol id="U9YkSO"><option id="U9YkSO"><table id="U9YkSO"><blockquote id="U9YkSO"><tbody id="U9YkSO"></tbody></blockquote></table></option></ol><u id="U9YkSO"></u><kbd id="U9YkSO"><kbd id="U9YkSO"></kbd></kbd>

    <code id="U9YkSO"><strong id="U9YkSO"></strong></code>

    <fieldset id="U9YkSO"></fieldset>
          <span id="U9YkSO"></span>

              <ins id="U9YkSO"></ins>
              <acronym id="U9YkSO"><em id="U9YkSO"></em><td id="U9YkSO"><div id="U9YkSO"></div></td></acronym><address id="U9YkSO"><big id="U9YkSO"><big id="U9YkSO"></big><legend id="U9YkSO"></legend></big></address>

              <i id="U9YkSO"><div id="U9YkSO"><ins id="U9YkSO"></ins></div></i>
              <i id="U9YkSO"></i>
            1. <dl id="U9YkSO"></dl>
              1. <blockquote id="U9YkSO"><q id="U9YkSO"><noscript id="U9YkSO"></noscript><dt id="U9YkSO"></dt></q></blockquote><noframes id="U9YkSO"><i id="U9YkSO"></i>
                企业空间 推销商城 存储论坛
                北京快三开奖全闪存阵列 IBM云盘算 Acronis 安克诺斯 安腾普 腾保数据
                首页 > 数据库 > MongoDB教程 > 注释

                MongoDB范畴盘问的索引优化

                2013-03-15 00:00泉源:中国存储网
                导读:我们晓得,MongoDB的索引是B-Tree构造的,和MySQL的索引十分相似。以是你应该听过如许的发起:创立索引的时分要思索到sort操纵,只管即便把sort操纵要用到的字段放到你的索引前面。但是有的状况下,如许做反而会使你的盘问功能更低。题目比方我们停止上面这

                我们晓得,MongoDB的索引是B-Tree构造的,和MySQL的索引十分相似。以是你应该听过如许的发起:创立索引的时分要思索到sort操纵,只管即便把sort操纵要用到的字段放到你的索引前面。但是有的状况下,如许做反而会使你的盘问功能更低。

                题目

                比方我们停止上面如许的盘问:

                 
                1. db.collection.find({"country": "A"}).sort({"carsOwned": 1}) 

                盘问条件是 {“country”: “A”},按 carsOwned 字段的正序排序。以是索引就很好建了,间接树立 country , carsOwned 两个字段的结合索引即可。像如许:

                 
                1. db.collection.ensureIndex({"country": 1, "carsOwned": 1}) 

                我们来看一个略微庞大一点的盘问:

                 
                1. db.collection.find({"country": {"$in": ["A""G"]}}).sort({"carsOwned": 1}) 

                这回我们是要盘问 country 为 A 或许 G 的数据条款,后果异样按 carsOwned 字段排序。

                假如我们还运用下面的索引,而且运用 explain() 剖析一下这个盘问,就会发明在输入中有一个“scanAndOrder” : true 的字段,而且 nscanned 的值能够会比想象中的大许多,乃至指定了 limit 也没什么结果。

                缘由

                这是什么缘由呢,我们先看上面这张图:

                MongoDB范畴盘问的索引优化

                如上图所未,右边一个是按 {“country”: 1, “carsOwned”: 1} 的次序树立的索引。而左边是按{“carsOwned”: 1, ”country”: 1} 次序树立的索引。

                假如我们实行下面的盘问,经过右边的索引,我们需求将 country 值为A的(左图的右边一支)一切子节点以及country 值为G的(左图的左边一支)一切子节点都取也来。然后再对取出来的这些数据按 carsOwned 值停止一次排序操纵。

                以是说下面 explain 输入了一个 “scanAndOrder” : true 的提示,便是说这次盘问,是先辈行了scan获取到数据,再停止了独立的排序操纵的。

                那假如我们运用左边的索引来做盘问,后果就不太一样了。我们没有将排序字段放在最初,而是放在了后面,相反把挑选字段放在了前面。那如许的后果便是:我们会从值为1的节点开端遍历(右图的右边一支),当发明有 country 值为 A 或 G 的,就间接放到后果会合。当完成指定命量(指定 limit 个数)的查找后。我们就可以间接将后果前往了,由于这时分,一切的后果自身便是按 carsOwned 正序陈列的。

                关于下面的数据集,假如我们需求2条后果。我们经过左图的索引需求扫描到4条记载,然后对4条记载停止排序才干前往后果。而左边只需求我们扫描2条后果就能间接前往了(由于盘问的进程便是按需求的次序去遍历索引的)。

                以是,在有范畴盘问(包罗$in, $gt, $lt 等等)的时分,实在刻意在前面追加排序索引通常是没无效果的。由于在停止范畴盘问的进程中,我们失掉的后果集自身并不是按追加的这个字段来排的,还需求停止一次额定的排序才行。而在这种状况下,能够反序树立索引(排序字段在前、范畴盘问字段在后)反而会是一个比拟优的选择。固然,能否更优也和详细的数据集有关。

                总结

                总结一下,举两个栗子。

                当盘问是:

                 
                1. db.test.find({a:1,b:2}).sort({c:1}) 

                那么间接树立 {a:1, b:1, c:1} 或许 {b:1, a:1, c:1} 的结合索引即可。

                假如盘问是:

                 
                1. db.test.find({a:1,b:{$in:[1,2]}}).sort({c:1}) 

                那么能够树立 {a:1, c:1, b:1} 的结合索引会比拟适宜。固然,这里只是提供了多一种思绪,详细能否接纳照旧需求视你的数据状况而定。

                原文链接:http://blog.nosqlfan.com/html/4117.html

                【编辑引荐】

                1. 先睹为快:甲骨文NoSQL数据库
                2. 八种主流NoSQL数据库零碎比照
                3. 解读NoSQL数据库的四各人族
                4. NoSQL在企业中的开展进程
                5. 一个首创公司能否实用NoSQL引发的讨论

                  【责任编辑:彭凡 TEL:(010)68476606】


                  原文:MongoDB范畴盘问的索引优化 前往数据库首页

                  分享到: 珍藏|打印|复制
                持续阅读
                要害词 :
                MongoDB引见
                中国存储网声明:此文观念不代表本站态度,若有版权疑问请联络我们。
                相干阅读
                产物引荐
                头条阅读
                栏目热门

                Copyright @ 2006-2019 ChinaStor.COM 版权一切 京ICP备14047533号

                中国存储网

                存储第一站,存储流派,存储在线交换平台