索引
- 基礎索引
用到ensureIndex方法建立索引,1為升序,-1為降序。
MongoDB數據庫在創建集合的時候,默認會為_id創建索引。
注:當系統已有大量數據時,創建索引就是一個非常耗時的工作,只需要指定backgroud:true即可。
db.yyd.ensureIndex({"name":1},{"backgroud:true"})
- 文檔索引
注:下面的查詢將不會用到索引,因為查詢的順序與索引建立的順序不一樣。
db.yyd.find({"address":{"short":"CD","city":"chengdu"}})
- 組合索引
此時,無論city和short的順序是前是后,都會用到索引。
- 刪除索引
為了后面方便查看,先把剛才建立的索引刪除掉。
- 唯一索引
這里的唯一索引就像非NoSQL數據庫里面的主鍵一樣。如果集合中有重復的值,系統會報錯。
- 強制使用索引
先向里面插入數據,使name和age為索引,當查詢的時候用explain()方法來查看查詢所用到的索引indexBounds參數。由上圖看出,沒用到索引。
現在通過hint命令強制使用索引。
- 索引名稱
索引的名稱是默認取好了的,一般是“索引_1”這樣的,當然也可以自己設置索引的名字。
db.yyd.ensureIndex({"name":1},{"name":"index_name"})
- 優化器profiler
profiler相當於MySQL中的慢查詢日志,但是比慢查詢日志更詳細。
使用profiler優化器就必須先開啟它,在mongoDB中有兩種方法控制profiler的開關和級別。
-
方法一:
在啟動服務的時候加上 –profiler 參數,通過這個參數來設置profiler的級別。
方法二:
db.setProfilingLevel(level,slowms)
在客戶端調用setProfilingLevel()方法。
level為級別,0代表不開啟,1代表記錄慢命令(默認100ms),3代表記錄所有命令。
slowms代表慢命令執行的時間,超過這個時間將寫入日志中。
查詢profiler日志
db.system.profile.find() show profile
性能優化
- 創建索引
- 限定返回結果數
- 只查詢使用到的字段,而不查詢所以字段
- 采用capped集合
- 采用Server Side Code Execution
- hint
- 采用profiling
- mongosniff底層監控
mongosniff --source NET lo
- mongostat查看運行中的實例統計信息
mongostat
- db.serverStatus查看實例運行狀態
>db.serverStatus()
- db.stats查看數據庫狀態
>db.stats()
《MongoDB學習筆記(三)--權限 && 導出導入備份恢復 && fsync和鎖》 傳送門 http://www.cnblogs.com/yydcdut/p/3558446.html
《MongoDB學習筆記(五)--復制集 && sharding分片》 傳送門 http://www.cnblogs.com/yydcdut/p/3564470.html