目錄
一、概述
二、索引的類型
1、單字段索引
2、復合索引
3、其他索引
三、索引的管理
1、索引的創建
2、索引的查看
3、索引的刪除
四、索引的使用
1、執行計劃
2、涵蓋的查詢
一、概述
索引支持在MongoDB中高效地執行查詢。如果沒有索引,MongoDB必須執行全集合掃描,也就是掃描集合中的每一個文檔,以選擇與查詢語句匹配的文檔。這種掃描全集和的查詢效率是非常低的,特別是在處理大量的數據時,查詢可能要花費幾十秒甚至幾分鐘,這對服務器的性能是非常致命的。如果查詢存在適當的索引,就可以使用該索引限制必須檢查的文檔數。
索引是特殊的數據結構,他以易于遍歷的形式存儲集合數據集的一小部分。索引存儲特點的字段或一組字段的值,按字段值排序。索引項的排序支持有效的相等匹配和基于范圍的查詢操作。此外,MongoDB還可以使用索引中的排序返回排序結果。
MongoDB索引使用的是B-Tree而MySQL是B+Tree
二、索引的類型
1、單字段索引
MongoDB支持在文檔的單個字段上創建用戶定義的升序/降序索引。稱為單字段索引。對于單個字段索引和排序操作,索引鍵的排序順序并不重要,因為MongoDB可以在任何方向上遍歷索引。
?
2、復合索引
MongoDB還支持多個字段的用戶定義索引,也就是復合索引
?
3、其他索引
三、索引的管理
1、索引的創建
db.collection.createIndex({userid:1)}? # 1表示升序 -1 表示降序
2、索引的查看
db.collection.getIndexes()
3、索引的刪除
db.collection.dropIndex(name)? # 根據名稱刪除
四、索引的使用
1、執行計劃
分析查詢的性能通常使用執行計劃來查看查詢執行的情況,如查詢消耗的時間、是否基于索引查詢
db.collection.find(query.options).explain(options)
2、涵蓋的查詢
當查詢條件和查詢的投影僅包含索引字段時,MongoDB直接從索引返回結果,而不掃描任何文檔或將文檔帶入內存。這些覆蓋的查詢可以非常有效。