程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> mongodb學習(索引詳解)

mongodb學習(索引詳解)

編輯:DB2教程

mongodb學習(索引詳解)


這篇博客將會給大家代碼mongodb索引的詳細學習,包括了索引管理和空間索引。索引是用來增加我們的查詢效率的,關系型數據庫和非關系型數據庫都有索引的功能,在某一個字段或者是鍵上添加索引,那麼當查詢該字段或者是鍵的時候,會提升很大的效率。

首先看看沒有創建索引之前的情況:
這裡寫圖片描述
可以看到,這裡我首先為persons的集合中添加了20萬條數據,然後利用:

db.persons.find({id:80000}).explain()

來計算查詢第8萬條數據所需要的時間,可以看到,這裡是消耗了101毫秒。速度還是可以的。

創建索引

接下來,我為persons集合的id鍵創建索引,在mongodb中為我們提供了一個方法:

db.集合名稱.ensureIndex({需要創建索引的鍵:1或-1})
這裡1表示建立升序的索引,-1表示建立降序的索引
這裡寫圖片描述
在創建索引以後的時間變為幾乎為0毫秒了,還是大大大的提高了查詢效率
注意:使用索引可以提高我們的查詢效率,可是會影響我們的插入和更改的效率,因為在插入和更改的時候是會維護該索引的,對於更新較少查詢較多的集合可以使用索引。

查看索引

db.persons.getIndexes()

這裡寫圖片描述
可以看到這裡有兩個索引,一個是系統默認會創建一個”_id”索引,另外一個就是我們自己創建的”number_id”,可以看到這裡的索引名稱和 我們的鍵值默認是相同的,如果我需要創建自己的索引名稱,比如我為name創建一個叫做”personName”的索引,可以這樣寫:
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:sql;"> 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:"索引的鍵:"*"})

關於索引的學習就到這裡了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved