標籤:explain 產生 資料庫 使用 建立 最佳化 保留 mongo dex
項目情境: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查詢最佳化