索引可以顯著的減少訪問檔案所需的時間。
如果沒有索引,必須訪問集合中的所有文件。
單鍵索引最適合查詢條件。
對於多個鍵的查詢條件,例如,]}復合索引是最好的選擇。
如果我們在(key1, key2)上有乙個復合索引,那麼key1上的第二個索引實際上是不需要的,但是它仍然可以使訪問速度加快一點。
如果我們在(key1, key2)上有乙個復合索引,那麼key2上的第二個索引會大大加快訪問速度。因此復合索引中的鍵順序非常重要!
_id上的索引是乙個自動建立的單鍵索引。
因此搜尋「_id」的值是可能的快速搜尋。
下面的命令上在code上建立了乙個單鍵unique索引。
db.department.
createindex(,
)
索引是唯一(unique)的,因為它強制與鍵**相關聯的值的唯一性,例如,集合中的每個文件都有與鍵**相關聯的不同值。
如果試圖插入兩個具有相同鍵**值的文件,則無法強制執行鍵約束。
在插入任何資料之前,應該建立唯一索引。
不能在存在重複鍵的集合上建立唯一索引。
在budget上建立非唯一索引。
db.department.
createindex(,
)
復合索引是每個條目(entry)由多個鍵組成的單個索引。
下面的命令是在鍵budget和total_staff_number上建立乙個復合鍵非惟一索引:
db.department.
createindex(,
)
使用以下查詢時就可以用到這個符合鍵索引:
db.department.
find
()
mongodb的索引預設是密集的。
在每個文件的密集索引中,有乙個索引鍵,即使文件缺少乙個鍵。
在乙個索引中存在乙個空條目,並且可以對類似的查詢使用乙個索引:
b.department.
find
()
密集索引在以下情況下不方便使用:
集合中的大量文件沒有索引鍵。
在稀疏索引中,只有具有索引鍵值的文件才被索引:
db.department.
createindex(,
)
在多鍵索引中,索引中的多個條目引用同乙個文件。
多鍵索引在索引值為陣列的領域非常有效。
db.department.
createindex
()
courses.code 陣列的每乙個值都將出現在索引中。
對任何陣列值的查詢都可以使用索引來定位文件。
雜湊索引中,鍵成為雜湊索引的引數,雜湊索引的結果確定文件在雜湊桶中的位置。
雜湊值將決定文件的順序:
db.department.
createindex
()
雜湊索引的限制:
可以使用索引處理相等查詢。
範圍查詢不能使用雜湊索引。
不允許使用多鍵雜湊索引。
浮點值在雜湊之前被轉換為整數;1.4和1.5在雜湊索引中具有相同的值。
geospacial index允許基於每個文件中儲存的緯度和經度值查詢靠近給定位置的文件。
geospacial index可用於有效的計算地理距離,包括地球的曲率。
mongodb支援不同種類的索引,然而,只有下面列出的前兩種索引可以組合為復合索引。
1: 公升序二叉樹索引
-1: 降序二叉樹索引
「雜湊」:雜湊表索引;用精確值查詢非常快,特別是在非常大的集合中。但不適用於不精確查詢(「$ gt」、「$regex」或類似查詢)
「文字」:為用自然語言搜尋字串中的單詞而設計的文字索引
「2d」:平面上的地理空間索引
「2dsphere」:球體上的地理空間索引
檢視索引清單:
db.department.
getindexes
()
輸出如下:
[
,"name"
:"_id_"
,"ns"
:"test.department"
}]
建立乙個索引:
db.department.
createindex
()
再次檢視索引清單:
[
,"name"
:"_id_"
,"ns"
:"test.department"},
"name"
:"name_hashed"
,"ns"
:"test.department"
}]
檢視到了新建立的索引。
刪除 name_hashed索引
db.department.
dropindex
("name_hashed"
)db.department.
getindexes
()
在這裡插入**片
[
,"name"
:"_id_"
,"ns"
:"test.department"
}]
在載入資料之前建立索引允許在插入資料時增量地構建索引。
在已經載入的集合上建立索引可能需要很長時間。
以在後台建立索引,而不需要關閉資料庫系統。
db.department.
createindex(,
)
可以通過使副本節點離線、構建索引並使節點聯機(允許節點趕上主副本節點)來在離線狀態下建立索引。
準備好後,我們可以將乙個節點公升級到主節點,並使另乙個輔助節點離線。
mongodb manual, indexes
banker k., bakkum p., verch s., garret d., hawkins t., mongodb in action, 2nd ed., manning publishers, 2016.
資料庫系統mysql MySQL資料庫系統
1 mysql的特點 1 多執行緒 多使用者 2 基於c s 客戶端 伺服器 架構 3 簡單易用 查詢速度快 4 安全可靠 2 mysql編譯安裝 代表鍵盤上tab鍵 1 準備工作 解除安裝使用rpm方式安裝的mysql rpm e mysql nodeps 安裝cmake包 cd media ta...
資料庫系統概論 04 索引
1 索引概述 建立索引是加快查詢速度的有效手段,使用者可以根據應用環境的需要,在基本表上建立乙個或者多個索引,以提供多種訪問路徑,加快查詢速度。一般來說,建立與刪除索引由資料庫管理員dba或者表的屬主 owner 即建立表的人負責完成,系統在訪問資料時會自動選擇合適的索引作為訪問路徑,使用者不必也不...
資料庫系統 資料庫 資料庫管理系統 資料庫系統
繼續寫資料庫系統的文章,第二篇 資料庫 資料庫管理系統 資料庫系統。本文主要談談這三者之間的關係。下方,摘自老師的ppt,非原創。資料庫管理系統 從系統角度看資料庫管理系統 資料庫系統 資料庫指的是長期儲存在計算機內有組織的,大量的,相關聯的,可共享的資料集合。資料應當是有組織的,不應該是雜亂無章的...