mongoDB index introduction

索引爲mongoDB的查詢提供了有效的解決方案,若是沒有索引,mongodb必須的掃描文檔集中全部記錄來match查詢條件的記錄。然而這些掃描是沒有必要,並且每一次操做mongod進程會處理大量的數據。mongodb

索引是一種存儲文檔集中一部分數據集的特殊的數據結構,以便更容易的去遍歷。索引存儲了一個經過value排序具體字段或者字段集。數據庫

mongodb的索引和其餘數據庫系統的索引基本上相同。mongodb的索引在文檔集collection層面上,而且支持文檔集的任何字段或複合字段上面建索引。數組

一個合適的索引會大大減小mongoDB檢索文檔集的次數。在某些狀況下,mongoDB能夠用索引去判斷哪些記錄複合查詢條件。數據結構

下圖闡釋了一個利用索引的查詢:less

Diagram of a query selecting documents using an index. MongoDB narrows the query by scanning the range of documents with values of ``score`` less than ``30``.

diagram of a query selecting documents using an index. MongoDB narrows the query by scanning the range of documents with values of score less than 30.ide

Tip性能

Create indexes to support common and user-facing queries. Having these indexes will ensure that MongoDB only scans the smallest possible number of documents.測試

索引也能夠優化性能在如下具體狀況:優化

排序結果集spa

mongodb能夠直接返回用索引排序文檔,不須要額外的排序階段。

Diagram of a query that uses an index to select and return sorted results. The index stores ``score`` values in ascending order. MongoDB can traverse the index in either ascending or descending order to return sorted results.

 

Covered Results

當查詢條件規則和查詢的映僅僅包括索引字段,mongoDB將直接從索引數據裏返回結果集,不須要掃描任何文檔,不須要將文檔放入內存。這些覆蓋的查詢將會很是高效。並且,這些索引也能夠covers聚合管道的操做。

Diagram of a query that uses only the index to match the query criteria and return the results. MongoDB does not need to inspect data outside of the index to fulfill the query.

索引類型

mongoDB提供了一系列的索引類型來支持具體的數據和查詢。

Default _id

默認狀況,mongoDB全部的collections都有一個索引在_id字段,若是應用沒有具體爲_id字段制定一個具體的driver,mongod將會建立一個值爲ObjectID的_id字段。

_id的索引是惟一索引,不容許客戶端插入_id字段值相同的兩條記錄。

Single Field (單一字段)

爲了補充mongoDB自定義的_id索引,mongoDB支持用戶在文檔的單個字段上面自定義索引。下圖是單一索引的說明:

Diagram of an index on the ``score`` field (ascending).

Diagram of an index on the score field (ascending).

Compound Index(複合索引)

MongoDB也支持用戶在符合的字段上面自定義索引,這些複合索引和單一字段索引相似;然而,當查詢條件依賴於額外的字段,複合索引中字段的順序會有很大的影響。舉個例子來講,若是一個複合索包括{ userid: 1, score: -1 },索引首先經過userid排序,而後經過score的value排序,下圖是複合索引的說明:

 

Diagram of a compound index on the ``userid`` field (ascending) and the ``score`` field (descending). The index sorts first by the ``userid`` field and then by the ``score`` field.

Diagram of a compound index on the userid field (ascending) and the scorefield (descending). The index sorts first by the userid field and then by thescore field.

Multikey Index(多鍵索引)

mongoDB用多鍵索引爲存儲數組內容的字段作索引,若是你的索引字段包含一個數組,MongoDB建立單獨的索引爲數組裏面的每個元素。這些多鍵索引容許查詢去選擇包含數組中某個元素或者全部元素。MongoDB自動的決定是否建立多鍵索引當索引字段中包含數組,你不須要明確的去制定多建類型。下圖爲多鍵索引的說明:

 

Diagram of a multikey index on the ``addr.zip`` field. The ``addr`` field contains an array of address documents. The address documents contain the ``zip`` field.

Diagram of a multikey index on the addr.zip field. The addr field contains an array of address documents. The address documents contain the zip field.

Geospatial Index(地理空間索引)

爲了有效支持地理空間座標數據的查詢,mongoDB提供了兩個特殊的索引:

2d indexes 返回結果用平面幾何 ,2sphere indexes 返回結果用球面幾何

See 2d Index Internals for a high level introduction to geospatial indexes.

Text Indexes(文本索引)

MongoDB爲文檔中字符串內容提供一個測試版的文本類型的索引。這些文本索引不存儲特定語言的停頓詞 (e.g. 「the」, 「a」, 「or」) 。

See Text Indexes for more information on text indexes and search.

Hashed Indexes(哈希索引)

爲了支持基於哈希的分片,mongoDB提供了哈希索引類型。哈希索引經過字段的哈希值來檢索,這些索引有更隨機的分佈,可是不適用於對於基於範圍的查詢

Index Properties(索引的屬性)

Unique Indexes

惟一索引不容許索引重複索引字段值。若是要在一個已經有重複的字段上面見索引,see Drop Duplicates for index creation options.除了惟一約束,惟一索引和MongoDB的其餘索引能夠互換。

Sparse Indexes

索引稀疏的屬性確保索引僅僅包含文檔集中有索引字段的的實體,索引忽略文檔中沒有索引字段的記錄。你能夠聯合稀疏索引和惟一索引來約束文檔中重複的值忽略文檔中沒有索引key的記錄。

相關文章
相關標籤/搜索