MongoDB初探-細說索引

來源:互聯網
上載者:User

一、索引操作

索引是為了最佳化查詢速度而生,MongoDB的索引和其他關係型資料庫,比如MySQL,Oracle等的索引幾乎相同,對於它們的索引最佳化經驗同樣適用於MongoDB。

1、建立索引

MongoDB中建立索引是通過ensureIndex操作完成的。下面測試了在使用索引和不使用索引下的效能差別,使用explain函數進行查詢效能分析。

插入測試資料:


不使用索引的查詢:


使用索引的查詢:


由以上測試可見,使用恰當的索引尋找可以大大最佳化查詢效率。

2、刪除索引


索引的元資訊儲存在每個資料庫的system.indexes集合中,該集合為保留集合,不能對其插入或刪除文檔。
操作只能通過ensureIndex或dropIndexes進行。

二、唯一索引

唯一索引可以確保集合的每一個文檔的指定鍵都有唯一值。MongoDB建立唯一索引的方式如下:

db.person.ensureIndex({"name":1},{"unique":true})

如果沒有對應的鍵,索引會將其作為null儲存。所以,如果對某個鍵建立了唯一索引,但插入了多個缺少該索引鍵的文檔,則由於文檔包含null值而導致插入失敗。

三、複合式索引

通過為ensureIndex的第一個參數傳入多個索引值的文檔來實現複合式索引的建立。複合式索引適用於對多條件查詢的最佳化上,一般來說,如果索引包含N個鍵,則對於前幾個鍵的查詢都會有協助。比如有個索引{"a":1,"b":1,"c":1,...,"z":1},實際上是有了{"a":1},{"a":1,"b":1},{"a":1,"b":1,"c":1}等的索引,但使用{"b":1},{"a":1,"c":1}等索引的查詢則不會被最佳化。

四、地理空間索引

MongoDB的地理空間索引用於處理平面座標的查詢,對於尋找離當前位置最近的N個場所非常適用,在LBS應用中經常使用。

1、建立空間索引

db.map.ensureIndex({"gps":"2d"})
"gps"鍵的值 必須是某種形式的一對值:一個包含兩個元素的數組或是包含兩個鍵(鍵名隨意)的內嵌文檔,如下所示:
{"gps":[0,100]}{"gps":{"x":0,"y":30}}{"gps":{"latitude":0,"longitude":100}}
預設情況下,地理空間索引假設值的範圍是 -180~180,這對於處理經緯度非常方便,也可以設定其範圍:
db.map.ensureIndex({"gps":"2d"},{"min":-360,"max":360})
2、尋找

通過find函數尋找:

將按照離座標點(40,80)由近及遠的方式將map集合的前5個文檔返回。

db.map.find({"gps":{"$near":[40,80]}}).limit(5)

通過資料庫命令尋找:

db.runCommand({geoNear:"map",near:[40,80],num:5});
geoNear和使用$near的find普通尋找類似,不過geoNear還會返回每個文檔到查詢點的距離。該距離以插入資料為單位,比如按照經緯度的角度插入,那距離就是經緯度。

具體其他空間索引的尋找請參考MongoDB官方文檔關於索引的介紹。

五、總結

對於索引的使用,要建立合適的索引,可以使用explain查看當前索引的效果。如果索引不適合當前業務需求的話,就要修改或刪除,以免不必要或不恰當的索引對資料庫操作產生影響。畢竟索引需要消耗記憶體和檔案儲存體。對於索引要即時維護,不要索引每一個鍵。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.