• mongodb索引


    1.【普通单列索引】
    先创建20W条数据,测试查询性能
    for(var i=0;i<200000;i++){
    db.java.insert({"name":"xiao"+i,"age":i})
    }
    var start = new Date()
    db.java(集合名).find({"name":"xiao186789"})
    var end = new Date()
    end-start
    为字段"name"创建索引
    db.java(集合名).ensureIndex({"name":1})【1:升序,-1:降序】

    2.【多列索引,复合索引】
    db.java(集合名).ensureIndex({"name":1,"age":-1})

    3.【子文档索引】
    {name:手机,price:12.6,spc:{weight:100,desc:phone}}
    db.java(集合名).ensureIndex({"spc.weight":1})

    4.【唯一索引】
    db.java(集合名).ensureIndex({name:1},{unique:true})

    5.【查看索引】
    db.java(集合名).getIndexes()
    db.java(集合名).find().explain("executionStats")
    主要关注:executionTimeMillis的值(单位:毫秒)

    6.【删除索引】
    删除单个
    db.java(集合名).dropIndex({name:1})
    删除所有
    db.java(集合名).dropIndexes()
    注意:在删除所有的索引时,主键索引会保留

    7.【重建索引】
    一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此。
    可以通过索引的重建,减少索引文件碎片,并提高索引的效率。
    类似mysql中的optimize table
    mysql里面使用optimize table 语法:optimize table 表名
    语法:db.java(集合名).reIndex()

    8.【索引使用注意事项】
    (1)索引的创建在提高查询性能的同时会影响插入性能,对于多读少写的文档可以考虑使用索引
    (2)复合索引要注意索引的先后顺序
    (3)每个key都建立索引不一定就能提高性能,索引不是万能的
    (4)在做排序工作的时候如果是超大数据量,也可以考虑加上索引用来提高排序的性能

  • 相关阅读:
    BZOJ2809: [Apio2012]dispatching
    BZOJ1455: 罗马游戏
    可并堆试水--BZOJ1367: [Baltic2004]sequence
    可并堆模板
    Codeforces870F. Paths
    Codeforces913F. Strongly Connected Tournament
    一练Splay之维修数列第一次
    Codeforces913E. Logical Expression
    Codeforces700C. Break Up
    可持久化KMP
  • 原文地址:https://www.cnblogs.com/myJuly/p/14548131.html
Copyright © 2020-2023  润新知