資料庫系統之MongoDB索引

2021-10-25 12:46:47 字數 3226 閱讀 8646

索引可以顯著的減少訪問檔案所需的時間。

如果沒有索引,必須訪問集合中的所有文件。

單鍵索引最適合查詢條件。

對於多個鍵的查詢條件,例如,]}復合索引是最好的選擇。

如果我們在(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,非原創。資料庫管理系統 從系統角度看資料庫管理系統 資料庫系統 資料庫指的是長期儲存在計算機內有組織的,大量的,相關聯的,可共享的資料集合。資料應當是有組織的,不應該是雜亂無章的...