1. 程式人生 > 其它 >MongoDB:索引

MongoDB:索引

技術標籤:NoSQL資料庫

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-bn19KcQI-1608263574432)(F:\JianShu_material\NoSQL\MongoDB\圖片\索引\索引.png)]

1. 索引詳講

  • Mongodb是基於集合建立索引(Index)
  • 索引的作用類似於傳統關係型資料庫,目的為了提高查詢速度
  • 如果沒有建立索引,Mongodb在讀取資料時必須掃描集合中的所有文件記錄。這種全集合掃描效率是非常低的,尤其在處理大資料時,查詢可能需要花費幾十秒到幾分鐘的時間,這對基於網際網路應用的網站來說是無法容忍的。
  • 當集合建立索引後,MongoDB將額外儲存一份索引資料。
  • 簡單的說,索引就是將文件按照某個(或某些)欄位順序組織起來,以便能根據該欄位高效的查詢。
  • 查詢將掃描索引內容,而不去掃描對應的集合。
  • 但在建立索引的同時,是需要增加額外儲存開銷的;
  • 在已經建立的索引的情況下,若新插入了集合文件記錄,則會引起索引重排序,這個過程會影響查詢速度。
  • Mongodb的索引基於B-tree資料結構及對應演算法形成。預設情況下,在建立集合的同時,Mongodb資料庫自動為集合_ id建立唯一索引,可以避免重複插入同一_ id值的文件記錄。

2. 建立索引

單一欄位(鍵)索引:

//key:鍵名  n=1:升序  n=-1:降序
db.collection_name.createIndex({<key>:<n>})

多欄位索引(複合索引):

//不僅能滿足多個欄位組合起來的查詢,還滿足所有能匹配複合索引字首的查詢(key1欄位即為複合索引字首)
db.collection_name.createIndex({<key1>
:<n>,<key2>:<n>,...})

建立唯一索引:

db.books.ensureIndex({name:-1},{unique:true})

索引使用需要注意的地方:

  • 建立索引的時候注意1是正序建立索引,-1是倒序建立索引
  • 索引的建立在提高查詢效能的同事會影響插入的效能,已建立索引時,若新插入文件記錄,會引起索引重排序,這個過程會影響查詢速度
  • 複合索引要注意索引的先後順序
  • 每個鍵全建立索引不一定就能提高效能:索引不是萬能的
  • 在做排序工作的時候如果是超大資料量也可以考慮加上索引用來提高排序的效能

3. 索引管理

檢視索引:

//返回指定集合上現有索引描述資訊
db.collection_name.getIndexes() //提供指定集合索引大小的報告資訊 db.collection_name.totalIndexSize()

刪除索引:

//刪除指定集合上的所有索引
db.collection_name.dropIndexes()

//刪除指定集合上的指定索引
db.collection_name.dropIndex({<key1>:<n>,<key2>:<n>,...})

//刪除指定集合上的所有索引,並重構所有現有索引
db.collection_name.reIndex()