第九章 索引 概覽

2021-10-17 03:55:37 字數 2572 閱讀 2275

索引可以幫助我們提高查詢速度。沒有索引的話,mongodb會執行全表掃瞄,找到查詢條件匹配的記錄。如果查詢中使用到了索引,mongodb可以過濾掉一部分記錄,從而提高查詢速度。

索引是一種特殊的資料結構(b-tree),它儲存collection的一小部分資訊,使得遍歷更快。索引儲存了字段的值,而且根據欄位的值排序。索引的順序對等值匹配範圍匹配非常有效。另外,在索引中使用排序,將返回排序後的結果。

假設有乙個集合,儲存以下記錄。

,,

,

如果score沒有索引,我們想對結果排序,那麼我們的查詢語句如下。

db.person.

find(}

).sort

()

如果我們對score建立乙個公升序索引,那麼返回的結果本身就有序,不需要在排序,查詢語句如下。

// 建立索引

db.person.

createindex()

// 查詢

db.person.

find(}

)

預設_id索引

mongodb會在字段_id欄位上建立唯一索引。這個_id可以防止兩個帶有相同_id值的文件插入。你不能刪除這個預設索引。

建立索引

db.collection_name.

createindex

(, option)

name字段建立降序索引

db.collection_name.

createindex

()

mongodb 的索引使用b-tree

索引名索引預設名是索引key+索引順序。例如建立索引的預設索引名為:item_1_quantity_-1

為了具有可讀性,我們可以自定義索引名。例如

db.products.

createindex(,

)

你可以使用db.collection_name.getindexes()檢視索引名。你不能對索引進行重新命名

索引型別

single field:單個索引的順序無關緊要,mongodb可以從任意方向(公升序或降序)遍歷。

compound field:聯合索引。聯合索引的索引索引順序就非常有必要。例如,聯合索引,索引會優先按照第乙個值,也就是userid的值進行排序,在userid相等情況下,再按照score排序。

對於聯合索引來說,索引key的排序順序決定了這個索引是否支援排序。

multikey index:mongodb的multikey index索引是建立在陣列欄位上。如果你的索引是建立在陣列上的,mongodb會為陣列中每個元素建立索引項。如果索引字段包含陣列,mongodb會自動決定是否需要建立multikey index;不需要顯示指定。

hashed indexes:雜湊索引。為了支援基於雜湊進行分片,mongodb提供了雜湊索引型別,雜湊索引儲存字段值的雜湊值(我是這麼理解的)。分布隨機,但是雜湊索引僅支援等值查詢不支援範圍查詢

索引屬性

unique indexes

唯一性可以確保防止插入相同的記錄到資料庫。

sparse indexes(稀疏索引)

稀疏索引可以確保索引只包含具有索引欄位的文件條目。稀疏索引會跳過那些不包含索引字段文件條目。

你可以組合sparese indexunique index來防止插入重複的文件。

ttl indexes

ttl indexes可以用來指定索引在一段時間後刪除文件。

hidden indexes

hidden indexes對查詢計畫(query planner)不可以見並且在查詢中也不能使用。我們可以使用該屬性來評估將要刪除的索引是否會造成一些影響。

覆蓋索引

query criteriaprojection of query僅包含這個索引字段,mongodb直接從索引返回結果,不會掃瞄任何文件或者加載入記憶體。覆蓋索引是優化查詢非常有效的方式。

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...

第九章 引用

引用擁有指標的所有功能,只是語法更加的簡單 1 引用就是別名,變數的另外乙個名字,變數和別名它們的位址是一樣的,操作別名就是操作變數 2 引用就是別名常量,一旦引用被初始化就不能再改變了 可以理解為指標常量,指向的值不能改變,能改變的只是它的該位址處的值 3 引用物件huamn mike human...