mongo 性能调优学习笔记

数据集大小有2亿多。json

一. 因为查询条件有两个,建了两个单独的索引,但仍是很慢,因而查了不少资料。获得如下优化方法。仅供参考。优化

    1.创建联合索引,将两个用到的查询字段创建成联合索引。url

    2.开启慢查询分析。db.setProfilingLevel(levelNum)code

  • 0 - 不开启。
  • 1 - 记录慢命令 (默认为>100ms)
  • 2 - 记录全部命令

    3. 看执行计划索引

db.getCollection('b2b11467_url').find({"st" : { $ne: 5 },"isCompany":1}).limit(1).explain('executionStats')

db.getCollection('b2b11467_url').find({"st" : { $ne: 5 },"isCompany":1}).limit(1).explain() //看winningPlan 就能够看到用了哪一个索引。 


"winningPlan" : {
            "stage" : "LIMIT",
            "limitAmount" : 1,
            "inputStage" : {
                "stage" : "FETCH",
                "inputStage" : {
                    "stage" : "IXSCAN",
                    "keyPattern" : {
                        "st" : 1,
                        "isCompany" : 1
                    },
                    "indexName" : "st_isCompany", //索引名称,这里是个组合索引
                    "isMultiKey" : false,
                    "isUnique" : false,
                    "isSparse" : false,
                    "isPartial" : false,
                    "indexVersion" : 1,
                    "direction" : "forward",
                    "indexBounds" : {  //索引详细信息
                        "st" : [ 
                            "[MinKey, 5.0)", 
                            "(5.0, MaxKey]"
                        ],
                        "isCompany" : [ 
                            "[1.0, 1.0]"
                        ]
                    }
                }
            }
        }

        

     结论: 若是是两个单独的索引,即便用到了两个查询条件都有索引,他最后只会命中一个,创建联合索引速度快不少。 由2s   ->   100+ ms ,发生了质的突破get

 

2、查看当前执行的语句     input

1.首先登录到系统管理员帐户
use admin
db.auth('xxx','xxxxx')

2.执行命令  
db.currentOp()
相关文章
相关标签/搜索