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的索引,扫描整个文档,最终速度很慢

  • 相关阅读:
    JavaScript原型、闭包、继承和原型链等等总结
    JS创建对象的几种方式整理
    js中 给json对象添加属性和json数组添加元素
    JSON 数组
    httpclient封装
    java 数字和日期处理
    jmeter所有版本下载路径
    idea的使用
    Java环境的搭建
    Axure8.0可用的授权码
  • 原文地址:https://www.cnblogs.com/peterleee/p/14517912.html
Copyright © 2011-2022 走看看