1. 程式人生 > >MongoDB查詢優化

MongoDB查詢優化

lai 項目 數值 新建 keys mon unique spa 字段

項目場景:Mongo在首次查詢特慢,後面就好的。如果長時間不查詢,下次開始的第一次又將非常慢,於是從鏈接當時多方面,排查最終發現還是mongo索引建的有問題。

MongoDB在大批量數據查詢時經常會遇到查詢耗時長,通常情況采用建各種索引來優化。

首先第一步排查,可以在查詢後使用.explain()來查看查詢數據軌跡,便於分析每個分片的查詢索引。

db.Collection.find({}).explain()

查看索引,如果不位可以根據查詢條件,新建索引。

1.查詢索引

db.COLLECTION_NAME.getIndexes()

2.新建索引

db.COLLECTION_NAME.ensureIndex(keys[options])

此命令支持分片創建索引

  • keys,要建立索引的參數列表。如:{KEY:1},其中key表示字段名,1表示升序排序,也可使用使用數字-1降序。
  • options,可選參數,表示建立索引的設置。可選值如下:
    • background,Boolean,在後臺建立索引,以便建立索引時不阻止其他數據庫活動。默認值 false。
    • unique,Boolean,創建唯一索引。默認值 false。
    • name,String,指定索引的名稱。如果未指定,MongoDB會生成一個索引字段的名稱和排序順序串聯。
    • dropDups,Boolean,創建唯一索引時,如果出現重復刪除後續出現的相同索引,只保留第一個。
    • sparse
      ,Boolean,對文檔中不存在的字段數據不啟用索引。默認值是 false。
    • v,index version,索引的版本號。
    • weights,document,索引權重值,數值在 1 到 99,999 之間,表示該索引相對於其他索引字段的得分權重。

3.重新創建索引

如果發現索引不合適就重新創建

db.COLLECTION_NAME.reIndex()

4.刪除索引

db.COLLECTION_NAME.dropIndex("INDEX-NAME")

MongoDB查詢優化