MongoDB索引
說到資料庫就不得不說索引,索引就像一本書的目錄,可以給我們快速定位所要的結果並返回,大大節省了查詢時間,MongoDB索引採用的是B-tree資料結果,查詢效率極高
官方文件 。下面就來講一下MongoDb的索引
索引型別
1.預設索引
MongoDB在建立集合的時候會預設給集合的_id
欄位建立唯一索引
,而且這個欄位的索引是無法刪除的,但是你可以自定義它的值
2.建立索引
db.collection.createIndex( <key and index type specification>, <options> )
<key and index type specification>
定義索引欄位和排序規則1升序 -1降序
可選引數<options>
列表
引數名稱 | 型別 | 描述說明 |
---|---|---|
background | bool | 建索引過程會阻塞其它資料庫操作,background可指定以後臺方式建立索引,即增加 "background" 可選引數。 "background" 預設值為false 。 |
unique | bool | 建立的索引是否唯一。指定為true建立唯一索引。預設值為false . |
name | string |
索引的名稱。如果未指定,MongoDB的通過_
連線索引的欄位名和排序順序生成一個索引名稱。 |
sparse | bool | 對文件中不存在的欄位資料不啟用索引;這個引數需要特別注意,如果設定為true的話,在索引欄位中不會查詢出不包含對應欄位的文件.。預設值為false |
expireAfterSeconds | Int |
指定一個以秒
為單位的數值,完成TTL
設定,設定集合
的生存時間。 |
v | indexversion | 索引的版本號。預設的索引版本取決於mongod建立索引時執行的版本。 |
weights | Documents | 索引權重值,數值在 1 到 99,999 之間,表示該索引相對於其他索引欄位的得分權重。 |
db.users.createIndex({"age": -1}, {name: "users_age"})
給users集合的age欄位建立索引,索引名稱為users_age
3.複合索引
MongoDB和mysql一樣也支援多個欄位建立複合索引 如:
db.users.createIndex({"age":1, "scores": -1})
索引會先按age升序排序,然後再相同的age中按scores降序排序
除了以上3中索引,MongoDB還有多鍵索引 (Multikey Indexes)、文字索引 (Text Indexes)、雜湊索引 (Hashed Indexes)等
索引屬性
1.唯一索引
db.collection.createIndex( <key and index type specification>, { unique: true } )
2.區域性索引
區域性索引僅索引集合中符合指定條件的文件。區域性索引具有較低的儲存要求,並降低了索引建立和維護的效能成本
3.稀疏索引
索引的稀疏屬性可確保索引僅包含
具有索引欄位的文件的條目。索引會跳過沒有索引欄位的文件。 您可以將稀疏索引選項與唯一索引選項組合,以拒絕具有欄位重複值的文件,但忽略沒有索引鍵的文件
還有MongoDB還有一些別的屬性,如TTL,這裡不一一說明了
索引管理
1.檢視集合的全部索引
db.collection.getIndexes()
2.檢視集合索引的大小
db.collection.totalIndexSize()
3.檢視整個庫的索引
db.getCollectionNames().forEach(function(collection) { indexes = db[collection].getIndexes(); print("Indexes for " + collection + ":"); printjson(indexes); });
4.刪除單個索引
db.collection.dropIndex(index)
db.collection.dropIndex( "scores" ) //刪除scores欄位的索引 db.collection.dropIndex({"age":-1}) //刪除age欄位的降序索引
5.刪除全部索引
db.collection.dropIndexes()
6.修改索引
官方原話,除了過期索引TTL,其餘索引的修改方式只能先刪除再建立
To modify an existing index, you need to drop and recreate the index. The exception to this rule isTTL indexes
, which can be modified via the
collMod
command in conjunction with the
index
collection flag.