1. 程式人生 > >MongoDB索引(索引基本操作)(二)

MongoDB索引(索引基本操作)(二)

1.    唯一索引

對欄位設定唯一索引時,可以保證欄位都是唯一性

db.collection.createIndex({field1:boolean, field2:boolean },{unique: true}) 

說明:我們在新建欄位為唯一索引時,對應的欄位不存在,索引會將其作為null儲存,如果對文件新增第一條時,沒儲存欄位對應的值時,會以null儲存,第二條還是對指定欄位對應的值,新增資料時,之前已經存在null,所以會導致新增失敗。

對文件中已經存在的相同的欄位新建唯一索引

  唯一索引不能夠建立在具有重複值的鍵上,如果你一定要在這樣的鍵上建立,使用dropDups引數,系統對重複值的鍵上只保留第一條記錄,剩下的記錄會被刪除


db.orders.createIndex({onumber:1},{unique:true,dropDups:true})  

2.      索引的名稱

我們之前在建立索引時,沒指定索引名稱,MongoDB會生成一個預設的索引名稱,我們可以通過name引數來指定我們新建索引的名稱

db.collection.createIndex({field1:boolean,field2:boolean },{name"index_name"})

 3.      後臺方式建立索引

             background 在建立索引時,會阻塞MongoDB其它操作,比如查詢MongoDB時,background為trues時可指定以後臺方式建立索引,預設值時false

db.collection.createIndex({{field1:boolean,field2:boolean }} },{background: true})  

 4.      稀疏索引  

         sparse:稀疏索引只包含有索引欄位的文件,即使索引欄位包含空值,指數跳過缺少索引欄位。索引是“稀疏的”,因為它不包含集合的所有文件。與之相反,非稀疏索引中包含一個集合中的所有文件,這些文件中不包含索引欄位的空值。類似於$exists用來判斷一個field是否存在

  1. db.collection.createIndex({{field1:boolean,field2:boolean }} },{ sparse: 
    true})  
 稀疏索引只包含有索引欄位的文件,即使索引欄位包含空值,指數跳過缺少索引欄位

 5.        執行計劃

MongoDB 提供了一個 explain 命令讓我們獲知系統如何處理查詢請求。利用 explain 命令,我們可以很好地觀察系統如何使用索引來加快檢索,同時可以針對性優化索引。

db.orders.find({onumber:1}).hint("onumber_1").explain()  

對一些比較重要的引數說明

    1) n:當前查詢返回的文件數量。

    2)millis:當前查詢所需時間,毫秒數。

   3)indexBounds:當前查詢具體使用的索引。

   4)nscanned:掃描document的行數。

   5)cursor:返回遊標型別(BasicCursor和BtreeCursor),我們這邊使用BtreeCursor型別。

   6)nscannedObjects:被掃描的文件數量。

   7)scanAndOrder:是否在記憶體中排序。