這篇博客將會給大家代碼mongodb索引的詳細學習,包括了索引管理和空間索引。索引是用來增加我們的查詢效率的,關系型數據庫和非關系型數據庫都有索引的功能,在某一個字段或者是鍵上添加索引,那麼當查詢該字段或者是鍵的時候,會提升很大的效率。
首先看看沒有創建索引之前的情況:
可以看到,這裡我首先為persons的集合中添加了20萬條數據,然後利用:
db.persons.find({id:80000}).explain()
來計算查詢第8萬條數據所需要的時間,可以看到,這裡是消耗了101毫秒。速度還是可以的。
創建索引
接下來,我為persons集合的id鍵創建索引,在mongodb中為我們提供了一個方法:
db.集合名稱.ensureIndex({需要創建索引的鍵:1或-1})
這裡1表示建立升序的索引,-1表示建立降序的索引
在創建索引以後的時間變為幾乎為0毫秒了,還是大大大的提高了查詢效率
注意:使用索引可以提高我們的查詢效率,可是會影響我們的插入和更改的效率,因為在插入和更改的時候是會維護該索引的,對於更新較少查詢較多的集合可以使用索引。
查看索引
db.persons.getIndexes()
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:sql;">
可以看到這裡有兩個索引,一個是系統默認會創建一個”_id”索引,另外一個就是我們自己創建的”number_id”,可以看到這裡的索引名稱和 我們的鍵值默認是相同的,如果我需要創建自己的索引名稱,比如我為name創建一個叫做”personName”的索引,可以這樣寫:db.persons.ensureIndex({name:1},{name:"personName"})
現在,我們的persons集合中有三個索引了,可以看到第三個name索引的名稱就是我們自己給的”personName”
創建唯一索引
db.persons.ensureIndex({鍵:1或-1},{unique:true})
好了,已經為name鍵創建了一個降序的唯一索引,那麼我們在試著插入一條name=”aName0”的記錄
此時會插入失敗,系統提示我們該name鍵已經創建了唯一索引
去除重復值
如果我們在創建唯一索引之前,在需要創建唯一索引的鍵上已經存在重復值。可以利用下面代碼去除已經存在的重復值:
db.persons.ensureIndex({name:-1},{unique:true,dropDups:true})
指定查詢使用的索引
如果我的集合中創建了好幾個索引,我需要使用某一個索引,可以通過在find()後面加上hint({索引名稱:1或-1}),來實現使用指定的索引。
注意:指定的索引必須提前存在,不然會查詢失敗。
查看已經創建的索引
系統為我們提供了一個system.indexex集合,裡邊存儲的是所有集合中創建的索引:
異步創建索引
在數據量很大的時候,創建索引是需要耗費一段時間的,在創建索引的過程中,會將集合鎖住,完成之後會將集合解鎖,這段時間我們不能對集合做任何操作,此時可以創建異步索引。
db.persons.ensureIndex({鍵:1或-1},{background:true})
刪除索引
刪除單個索引
db.runCommand({dropIndexes:"集合名稱",index:"索引的鍵:1或-1"})
刪除所有索引
db.runCommand({dropIndexes:"集合名稱",index:"索引的鍵:"*"})
關於索引的學習就到這裡了。