學習mongodb,體會mongodb的每一個使用細節,歡迎閱讀威贊的文章。這是威贊發布的第84篇mongodb技術文章,歡迎瀏覽本專欄威贊發布的其他文章。如果您認為我的文章對您有幫助或者解決您的問題,歡迎在文章下面點個贊,或者關注威贊。謝謝。
在Mongodb當中,為集合添加索引能夠提高查詢效率 。如果沒有索引,Mongodb必須掃描集合中的每一個文檔數據來返回查詢結果。如果集合當中包含查詢合適的索引,Mongodb就可以使用該索引限制掃描文檔的數量。盡管索引能夠提高查詢效率,但為集合添加索引會對Mongodb數據寫入性能產生負面的影響。對于大量讀寫的集合,加入索引的代價是昂貴的,因為每一次數據插入和更新,都會帶來索引的更新。
應用場景
當應用經常重復的針對集合中的某個字段或一些字段進行查詢時,系統維護人員使用這些字段來創建索引,能夠提高查詢性能。例如下面的一些場景
場景 | 索引類型 |
人力資源部門經常使用員工的id查看員工信息。這可以為用戶的id添加索引來提高查詢效率 | 單字段索引 |
銷售人員經常需要查看每個區域的銷售情況。而區域是使用嵌入文檔形式保存在數據庫里的數據,包括多個字段,如城市,區縣和郵編等。系統維護人員則可以在區域這個文檔類型的字段上添加索引來提高查詢性能。但用戶在查詢時,必須使用相同字段的文檔作為過濾條件才可以使用到該索引 。 | 在嵌入是文檔字段上創建的單字段索引 |
一個雜貨鋪老板,經常使用清點庫存信息,需要使用商品名稱和數量來查詢數據。系統維護人員可以在商品名稱和數量上添加索引來提高查詢效率 | 復合索引 |
用戶可以使用Mongodb Atlas, Mongodb shell和連接數據庫的各種驅動以及客戶端來創建索引。后續的文章中我們會介紹索引的創建方法。
索引結構
索引是保存了集合中部分數據的特殊數據結構。Mongodb使用B-tree這種數據結構來保存數據。很容易使用正序或者倒序來查詢索引或通過索引來排序。索引保存了指定的字段值,并按照用戶的指定的順序進行排序。這種排序好的索引數據結構,能夠方便的支持等值查詢和區間查詢。同時能夠方便的支持排序。
默認索引
在集合創建的時候,Mongodb為_id字段建立的唯一索引。保證用戶不會插入兩個相同_id的文檔。Mongodb不支持用戶修改或刪除默認索引。
索引的命名
索引默認使用字段名稱和用戶指定字段的排序方式來命名。使用下劃線來區分字段名稱和排序方式。例如在字段item和quantity上建立索引,其中item字段使用正序,而quantity字段倒序。{item: 1, quantity: -1}. 建立索引時,1表示正序,而-1表示倒序。則建立索引的默認名稱是 item_1_quantity_-1.
索引建立后就無法重新命名,需要刪除索引重建。
索引構建性能
在索引構建過程當中,應用和客戶端性能可能會被索引的構建造成影響。包括限制對正在構建索引集合的讀寫等。