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是否存在
- db.collection.createIndex({{field1:boolean,field2:boolean }} },{ sparse:
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:是否在記憶體中排序。