Mongodb索引操作
阿新 • • 發佈:2021-12-14
目錄
一.簡介
資料庫的索引類似書籍的目錄索引一樣,有了索引,看書的時候就不用翻遍整本書,就可以根據目錄頁數直接跳轉到目標內容,提高閱讀和查詢效率。資料庫的索引也是如此,它的作用就是用來提升查詢速度的,有了索引,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})