zoukankan      html  css  js  c++  java
  • Mongo索引优化

    Mongo常用索引

    单索引

    复合索引:复合索引必须完全按照建索引的顺序来查

    db.events.createIndex( { username: 1, date: -1 } )
    #只能利用username: 1的排序
    db.events.find().sort( { username: 1, date: 1 } )
    #完全无法利用索引
    db.events.find().sort( { date: 1 } )

    多key索引:针对数据类型为数组的情况来建立索引

    索引属性:

    unique:用于限制索引的field是否具有唯一性属性,即保证该field的值唯一

    db.members.createIndex( { "user_id": 1 }, { unique: true } )

    partial:在索引的时候只针对符合特定条件的文档来建立索引,减少索引数量,节省空间,提高检索效率

    db.restaurants.createIndex(
       { cuisine: 1, name: 1 },
       { partialFilterExpression: { rating: { $gt: 5 } } } //只有当rating大于5时才会建立索引
    )

    explain分析查询性能:db.table.find({}).explain("executionStats")关键就是这个语句

    关于find和sort利用索引

    关键点:

    1.使用索引的顺序:equality->sort->range

    2.find和sort里面同等级的会自动排序,会使之尽量满足索引

    有趣的case:

    索引:{"_id":1},{"score":1}

    db.table.find({"score":100}).sort({"_id":-1}).limit(10)怎么利用索引?

    避免内存排序,内存排序超过32M时会放弃

    数据量少时会先使用score的索引,然后再去排序,数据量大时会利用_id的索引,扫描整个文档,最终速度很慢

  • 相关阅读:
    JS 实现鼠标移入移出透明度动画变化效果
    Undefined和null的本质区别
    网格布局知识点总结
    用CSS3搭建立方体
    缩放实例
    浮动与细线边框制作广告商标
    用伪元素制作列表菜单
    元素的分类与转换
    网易云导航栏
    CSS中内边距和宽度内减
  • 原文地址:https://www.cnblogs.com/peterleee/p/14517912.html
Copyright © 2011-2022 走看看