關於設計mongodb索引,涉及到記憶體排序問題解決
查詢指令碼如下:
db.quickreplytemplate.find().sort().explain("executionstats");很簡單乙個查詢,然後我們需要設計兩個索引,看看mongodb執行器對這兩個索引如何選擇優化?
db.getcollection("quickreplytemplate").createindex(, );
db.getcollection("quickreplytemplate").createindex(, );兩個很簡單是索引,並且區別很明顯,後者多了乙個updateon引數,然後這個引數就是排序引數,我們看看執行計畫
// 1開始分析:},},}]
},"winningplan": ,
"indexname": "idx_quickreplytemplate__scenekey_1_termid_1_isdelete_1_updatedon_1",
"ismultikey": false,
"multikeypaths": ,
"isunique": false,
"issparse": false,
"ispartial": false,
"indexversion": numberint("2"),
"direction": "forward",
"indexbounds": }},
"rejectedplans": [
,"inputstage": ,
"indexname": "idx_quickreplytemplate__scenekey_1_termid_1_isdelete_1",
"ismultikey": false,
"multikeypaths": ,
"isunique": false,
"issparse": false,
"ispartial": false,
"indexversion": numberint("2"),
"direction": "forward",
"indexbounds": }}
}}]},
"executionstats": ,
"indexname": "idx_quickreplytemplate__scenekey_1_termid_1_isdelete_1_updatedon_1",
"ismultikey": false,
"multikeypaths": ,
"isunique": false,
"issparse": false,
"ispartial": false,
"indexversion": numberint("2"),
"direction": "forward",
"indexbounds": ,
"key***amined": numberint("0"),
"seeks": numberint("1"),
"dupstested": numberint("0"),
"dupsdropped": numberint("0"),
"seeninvalidated": numberint("0")}}
},"serverinfo": ,
"ok": 1
}
可以看到,它選擇了後者,並且:檢出文件、然後有進行了索引掃瞄,基本上可以理解為最優了。
然後我們看看它排除了哪些索引?
第一步可以看出,進行了記憶體排序(sort);雖然,我們可以看出,他走了索引,但是索引命中的資料,又進行了記憶體排序。那麼產生記憶體排序的危害,我們就不細聊了。可以度娘;
MongoDB 關於索引的建議
我們收到了很多關於索引的問題。這一部分解答了其中的一小部分。有幾點要記住。第一,mongodb索引和mysql索引非常相似並且對於mysql的索引優化有很多也適用於mongodb。第二,更重要的是,這些索引的建議對你的應用提高也是有限的。對於應用的最佳索引策略應該基於很多的重要因素。包含了你期望查詢...
mongoDB 索引使用
一 索引基礎 mongodb的索引幾乎與傳統的關係型資料庫一模一樣,這其中也包括一些基本的優化技巧。下面是建立索引的命令 db.test.ensureindex 可以通過下面的名稱檢視索引是否已經成功建立 db.test.getindexes 刪除索引的命令是 db.test.dropindex 在...
MongoDB學習 索引
一 索引基礎 mongodb的索引幾乎與傳統的關係型資料庫一模一樣,這其中也包括一些基本的優化技巧。下面是建立索引的命令 db.test.ensureindex 可以通過下面的名稱檢視索引是否已經成功建立 db.test.getindexes 刪除索引的命令是 db.test.dropindex 在...