【MongoDB】索引概述(二)

四、索引屬性

1.唯一索引

索引的unique屬性使MongoDB防止索引字段出現重複值。除了唯一約束功能之外,唯一索引在功能上可以與其他MongoDB索引互換。

2.局部索引

3.2版中的新功能。

 

局部索引僅索引集合中符合指定過濾器表達式的文檔。通過索引集合中文檔的子集,局部索引具有較低的存儲需求,並降低了索引創建和維護的性能成本。

局部索引提供了稀疏索引功能的超集,應優先於稀疏索引。

超集定義:如果一個集合S2中的每一個元素都在集合S1中,且集合S1中可能包含S2中沒有的元素,則集合S1就是S2的一個超集,反過來,S2是S1的子集。 S1是S2的超集,若S1中一定有S2中沒有的元素,則S1是S2的真超集,反過來S2是S1的真子集

 

3.稀疏索引

索引的稀疏屬性可確保索引僅包含具有索引字段的文檔。索引會跳過沒有索引字段的文檔。

可以將稀疏索引選項與唯一索引選項結合使用,以防止插入索引字段具有重複值的文檔,並跳過缺少索引字段的索引文檔。

 

4.TTL索引

TTL索引是MongoDB可以使用的特殊索引,可以在一定時間後自動從集合中刪除文檔。對於某些類型的信息(例如機器生成的事件數據,日誌和會話信息),它們僅需要在數據庫中保留有限的時間,這是理想的選擇。

請參閱:通過設置TTL使集合中的數據過期以獲取實現說明

五、索引作用

索引可以提高讀取操作的效率。 Analyze Query Performance教程提供了帶有或不帶有索引的查詢執行統計信息的示例。

有關MongoDB如何選擇要使用的索引的信息,請參閱查詢優化器

六、索引和排序規則

此項是3.4版的新增功能。

歸類允許用戶爲字符串比較指定特定語言的規則,例如字母大寫和重音符號的規則。

本節介紹的是Mongo Shell下使用排序規則的方法:

一個操作要將索引用於字符串比較,同時必須指定相同的排序規則。即,具有排序規則的索引不能支持對索引字段進行字符串比較的操作(如果該操作指定了不同的排序規則)。

例如,集合myColl在字符串字段category 建立索引,同時排序規則local設置爲“ fr”的。

db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )

以下查詢操作指定與索引相同的排序規則時,可以使用索引:

db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )

但是,默認情況下使用“simple”二進制排序的以下查詢操作不能使用索引:

db.myColl.find( { category: "cafe" } )

對於索引前綴鍵不是字符串,數組和嵌入式文檔的複合索引,指定其他排序規則的操作仍可以使用索引來支持索引前綴鍵的比較。

例如,集合myColl在數字類型字段score和price以及字符串類型字段category上有一個複合索引;使用排序規則“ fr”創建索引以進行字符串比較:

db.myColl.createIndex(

   { score: 1, price: 1, category: 1 },

   { collation: { locale: "fr" } } )

以下使用“simple”二進制排序規則進行字符串比較的操作可以使用索引:

db.myColl.find( { score: 5 } ).sort( { price: 1 } )

db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )

以下操作將“simple”二進制排序規則用於索引category字段上的字符串比較,該操作可以使用索引僅滿足查詢score: 5部分:

db.myColl.find( { score: 5, category: "cafe" } )

有關排序規則的更多信息,請參閱collation reference page.

以下索引僅支持簡單的二進制比較,不支持排序規則:

七、覆蓋查詢

當查詢條件和查詢的投影僅包含索引字段時,MongoDB直接從索引返回結果,而無需掃描任何文檔或將文檔帶入內存。這些涵蓋的查詢可能非常有效。

僅使用索引來匹配查詢條件並返回結果的查詢圖。 MongoDB無需檢查索引之外的數據即可完成查詢。

 

有關覆蓋查詢的更多信息,請參見覆蓋查詢

 

八、索引交集

MongoDB可以使用索引交集來完成查詢。對於指定複合查詢條件的查詢,如果一個索引可以滿足查詢條件的一部分,而另一個索引可以滿足查詢條件的另一部分,則MongoDB可以使用兩個索引的交集來滿足查詢。使用複合索引還是使用索引交集更有效取決於特定查詢和系統。

有關索引交集的詳細信息,請參見索引交集

 

九、限制條件

索引也有某些限制條件,例如索引鍵的長度或每個集合的索引數。有關詳細信息,請參見索引的限制

 

十、其他注意事項

儘管索引可以提高查詢性能,但是索引還提出了一些操作上的考慮。有關更多信息,請參見索引的操作注意事項

應用程序在建立索引期間可能會遇到性能下降的情況,包括對集合的有限讀/寫訪問權限。有關索引構建過程的更多信息,請參見填充集合上的索引構建,包括複製環境中的索引構建部分。

一些驅動程序可能使用NumberLong(1)而不是1來指定索引。這對結果索引沒有任何影響。

 

上篇:索引概述(一)  

下篇:單字段索引

原文參考:https://docs.mongodb.com/manual/indexes/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章