數據集大小有2億多。json
一. 因爲查詢條件有兩個,建了兩個單獨的索引,但仍是很慢,因而查了不少資料。獲得如下優化方法。僅供參考。優化
1.創建聯合索引,將兩個用到的查詢字段創建成聯合索引。url
2.開啓慢查詢分析。db.setProfilingLevel(levelNum)code
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()