1. 程式人生 > 其它 >Mongodb索引操作

Mongodb索引操作

目錄

一.簡介

資料庫的索引類似書籍的目錄索引一樣,有了索引,看書的時候就不用翻遍整本書,就可以根據目錄頁數直接跳轉到目標內容,提高閱讀和查詢效率。資料庫的索引也是如此,它的作用就是用來提升查詢速度的,有了索引,MongoDB查詢的時候就可以索引中找到條目後,直接跳轉到目標collection的位置。

二.預設索引

檢索系統索引時,可以發現,mongodb預設的為每個集合都建立了預設的"_id"索引,作為檢索時參照的索引。即我們平時的find操作都是預設根據"_id"這個索引來查詢的

> db.system.indexes.find();
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "kaiye.c1", "name" : "_id_" }
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "kaiye.c2", "name" : "_id_" }
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "kaiye.c3", "name" : "_id_" }

三.為什麼要建自定義索引

先往一集合c4中新增一百萬條資料,後檢索age=100的那條資料,並呼叫explain函式計算檢索過程中資訊,發現在無排序,無自定義索引的情況下,沒查詢一條資料,需要掃描一百萬條資料,並且只是一個簡單查詢就耗費了546毫秒,這在大資料量的業務系統中是難以接受的。

for(var i=0;i<1000000;i++){
	db.c4.insert({name:"diao",age:i})
}

四.自定義索引有無的對比

首先為c4集合的name欄位建立索引,關鍵字為ensureIndex,語法為db.c4.ensureIndex({age:1}),之後再執行查詢age=100的操作,檢索資訊如下圖

此時可以發現,在為age欄位建立索引後進行一次簡單的查詢,此時遍歷的條數只有一條,並且耗時幾乎為0,相比無索引的檢索,效果可見一般。

五.對索引的其他操作

1.查詢索引的相關資訊
db.集合.stats();

2.刪除索引,刪除集合,也會將集合中的索引全部刪除
db.集合.dropIndex({索引欄位:1})

3.建立唯一索引:唯一索引的意思是,當某一欄位被設定為唯一索引後,該欄位在所在集合中,不允許有相同的值存在,即值是唯一的,比如以上案例,再插入age=100的一條文件,則會有報錯資訊出來了。
db.集合.ensureIndex({age:1},{unique:true})

本文版權歸作者所有,歡迎轉載,請務必新增原文連結。