【MongoDB】(一)——關於MondoDB索引的總結

來源:互聯網
上載者:User
導讀

為資料建立索引有助於提高查詢資料的效能,本篇文章總結了建立MongoDB索引應遵循的規則。

我將這些規則分成四類

1.“query”
2.“sort”
3.“RAM”
4.“selectivity” query

db.collection.find({})

  這一部分主要針對查詢中的query部分,也就是find操作,說明我們如何建立索引,以及什麼樣的查詢能夠使該索引有效。
  
  【總的規則】:索引中包含find中的全部欄位
  【具體規則】:
         1.如果所有查詢都使用了同樣的,唯一的欄位,則建立只包含一個欄位的索引。
        【舉例】:db.collection.find({x:”}),那麼索引就是{x:1}
         
         2.建立複合索引來支援包含多個欄位的查詢。複合索引支援查詢中有全部索引欄位或其子集(從開頭算起的子集,類似於首碼一樣的東西)的查詢。         
        【舉例】:如果索引是{x:1,y:1,Z:1},那麼它支援find的查詢條件為{x:”},{x:”,y:”}以及{x:”,y:”,z:”}

【注意】:這裡的子集,有些不同於數學中的子集。這裡的子集有個專業名稱Index Prefix,索引首碼,所以暗含了是從前往後,是有順序的。可以把索引看成一個單詞,然後Index Prefix就是從前往後截取索引中的部分。

             sort

db.collection.find().sort({})

  這一部分主要針對查詢中的sort部分,說明針對要排序的欄位,我們應該如何建立索引,或者說如何排序才能使建立的索引有效。

【規則】:
     1.如果索引是唯一欄位,查詢中的sort也使用該欄位,那麼無論是升序還是降序,索引都有效。
     【舉例】:如果索引是{x:1},sort({x:1})或({x:-1})都可以。
     
     2.如果索引是複合欄位,那麼sort中欄位的排序方向(升序或降序)和要和索引完全一致,或每個欄位都和索引相反。
     【舉例】:如果索引是{x:1,y:-1},那麼sort({x:1,y:-1})或者sort({x:-1,y:1})
     
     3.如果索引是複合欄位,且查詢中的sort部分的欄位如果是是索引中的全部欄位或子集(同上面的意思一致),那麼find()中的欄位滿足上一部分我們說的query的第2條規則:‘複合索引支援查詢中有全部索引欄位或其子集(從開頭算起的子集,類似於首碼一樣的東西)的查詢。’
     
     4.如果索引是符合欄位,但是查詢中的sort部分的欄位不是索引的全部欄位或子集,這個時候find中的欄位,必須是sort中欄位在索引中其位置之前的欄位。
     【舉例】:索引是{x:1,y:1,z:1},如果sort({y:1}),那麼find必須是索引中y之前的欄位,包括y,即({x:1,y:1}) RAM

  index的大小需要小於RAM的大小,才能避免從磁碟中查詢。
  計算index的大小:

db.collection.totalIndexSize()

  實際當中,應計算所有collection上index的大小,並使RAM大於index大小總和。
   selectivity

  在建立索引時,要保證儘可能高的可選擇性,不要建立了索引之後,仍需要掃描整個collection。
比如collection中有個欄位是Status,該欄位的值就‘A’(Active)或‘D’(Delete),這個時候如果索引是該欄位的話,就會是很低的選擇性,這個時候,可以結合另一個欄位來建立索引,或者讓Status的值分布更廣泛些。 導圖總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.