MongoDB學習筆記(四)--索引 && 性能優化


索引                                                                                            

  • 基礎索引

    用到ensureIndex方法建立索引,1為升序,-1為降序。

    image

    MongoDB數據庫在創建集合的時候,默認會為_id創建索引。

    注:當系統已有大量數據時,創建索引就是一個非常耗時的工作,只需要指定backgroud:true即可。

    db.yyd.ensureIndex({"name":1},{"backgroud:true"})
  • 文檔索引

    image

    注:下面的查詢將不會用到索引,因為查詢的順序與索引建立的順序不一樣。

    db.yyd.find({"address":{"short":"CD","city":"chengdu"}})
  • 組合索引

    image

    此時,無論city和short的順序是前是后,都會用到索引。

    • 刪除索引

    image

    為了后面方便查看,先把剛才建立的索引刪除掉。

  • 唯一索引

    image

    這里的唯一索引就像非NoSQL數據庫里面的主鍵一樣。如果集合中有重復的值,系統會報錯。

    • 強制使用索引

    image

    先向里面插入數據,使name和age為索引,當查詢的時候用explain()方法來查看查詢所用到的索引indexBounds參數。由上圖看出,沒用到索引。

    現在通過hint命令強制使用索引。

    image

    • 索引名稱

    索引的名稱是默認取好了的,一般是“索引_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

轉載請注明出處:http://www.cnblogs.com/yydcdut/p/3563704.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM