索引可以幫助我們提高查詢速度。沒有索引的話,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 index
和unique index
來防止插入重複的文件。
ttl indexes
ttl indexes
可以用來指定索引在一段時間後刪除文件。
hidden indexes
hidden indexes
對查詢計畫(query planner)不可以見並且在查詢中也不能使用。我們可以使用該屬性來評估將要刪除的索引是否會造成一些影響。
覆蓋索引
當query criteria
和projection 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...