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

MongoDB:mongodb的索引操作

編輯:DB2教程

對於數據庫而言,無非就是增刪改查,通常我們在項目應用中,READ操作又占50%以上的操作,客戶往往對此也比較敏感,如果在這方面,效率上處理不好,往往是要遭後人唾棄的!所以這時就需要索引來發揮作用了,下面我們先看一下索引給我們帶來的感官上的區別,然後我們再詳細說說mongodb的索引操作!

一、首先,我們向數據庫中插入10萬條數據:

for(var i=0;i<100000;i++){
	var index=parseInt(i*Math.random());
	db.person.insert({"name":"jessonlv"+i,"age":i});
}

\

 

然後我們查找第一萬條數據的數據,即名字為 jessonlv10000的。注意在此之前,我們沒有為person建立索引,另外mongodb為我們提供了explain關鍵字,使我們可以進行分析操作。

db.person.find({"name":"jessonlv"+10000}).explain()
\

cursor :"BasicCursor"的意思是表查找的時候,采用的是表掃描,也就是順序查找,呵呵,順序查找。

nscanned:這個的意思是查找操作一共浏覽了10萬的數據(文檔),也就是整個表的文檔數量。有點感覺了吧。

millis:這是我們最關心的時間了,一共用了66毫秒。湊合!有點誇張,我們可以做的更好。

二、建立索引:

建立索引
db.person.ensureIndex({"name":1})
db.person.find({"name":"jessonlv"+10000}).explain()

\

 

建立索引後,我們再對比下建立索引之前的參數值,一共查找了一個文檔,所用時間竟然是離譜的0(其實不可能是零了,只是速度太快了),至此,大家應該感受到這種冰火兩重天了吧......

三、唯一索引

mongodb的操作是這樣的:

db.person.ensureIndex({"name":1},{"unique":true})
重復的鍵是不能插入的

四、組合索引

組合索引
db.person.insert({"name":"je","age":26,"birthday":"1986-5-4"})
db.person.insert({"name":"jes","age":26,"birthday":"1986-4-4"})
db.person.insert({"name":"jess","age":26,"birthday":"1986-3-4"})
db.person.insert({"name":"jesso","age":26,"birthday":"1986-2-4"})
db.person.insert({"name":"jessonlv","age":26,"birthday":"1986-1-4"})

建立索引:
db.person.ensureIndex({"name":1,"birthday":1})
db.person.ensureIndex({"birthday":1,"name":1})
db.person.getIndexs()

\

在此,我們采用查詢的時候,優化器會采用最優的索引去查詢

db.person.find({"birthday":"1986-5-4","name":"jes"}).explain()

\

因為我們做查詢時,查詢優化器會使用我們建立的這些索引來創建查詢方案,如果某一個先執行完則其他查詢方案被close掉,這種方案會被mongodb保存起來,當然如果非要用自己指定的查詢方案,這也是可以的,在mongodb中給我們提供了hint方法讓我們可以暴力執行。

\

五、刪除索引

我們的業務需求是不斷在變化的,那麼索引也肯定要根據實際情況而改變,索引是需要維護的,需要將原有的刪除然後再建立新的索引。

db.person.dropIndexes("1")
\

so....over,下期我將會總結下mongodb的主從復制

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