MongoDB 索引
索引是特殊的資料結構,儲存在一個易於遍歷讀取的資料集合中,索引是對資料庫表中一列或多列的值進行排序的一種結構,MongoDB 的索引儲存在記憶體中,是B樹結構
-
db.collection.createIndex(keys, options),使用createIndex() 方法建立索引
-
Key 值為要建立的索引欄位,1 指定按升序建立索引,-1 指定降序
# 建立索引:按k1升序
db.collection.createIndex({"k1":1}})
# 建立複合索引,按k2升序,k3降序
db.collection.createIndex({"k2":1,"k3":-1}})-
options 可選引數:
-
background,布林值,建索引過程會阻塞其它資料庫操作,background可指定以後臺方式建立索引,即增加 "background" 可選引數。 "background" 預設值為false
-
unique,布林值,建立的索引是否唯一。指定為true建立唯一索引。預設值為false.
-
name,字串,索引的名稱。如果未指定,MongoDB的通過連線索引的欄位名和排序順序生成一個索引名稱
-
weights,索引權重值,數值在 1 到 99,999 之間,表示該索引相對於其他索引欄位的得分權重
-
-
-
getIndexes(),檢視索引
-
totalIndexSize(),檢視索引大小
-
dropIndexes(<index_name>),刪除索引,可以指定索引名稱刪除
索引查詢
使用索引查詢有兩個條件
-
所有查詢欄位是索引的一部分
-
所有查詢返回的欄位在同一個索引中
因為索引存在於RAM中,從索引中獲取資料比通過掃描文件讀取資料要快得多
_id在查詢中會預設返回,如果索引欄位沒有包含 _id 欄位,注意查詢條件要新增 "_id":0
,使查詢結果不包含 _id欄位
不能使用索引查詢的情況:
-
正則表示式及非操作符,如 $nin, $not, 等。
-
算術運算子,如 $mod, 等。
-
$where 子句
查詢分析
MongoDB 查詢分析可以確保我們所建立的索引是否有效,是查詢語句效能分析的重要工具
MongoDB 查詢分析常用函式有:explain() 和 hint()。
-
explain
explain 操作提供了查詢資訊,使用索引及查詢統計等。有利於我們對索引的優化
db.collextion.find({...}).explain()
,查詢分析結果:
-
indexOnly: 欄位為 true ,表示使用了索引
-
cursor:使用了索引是 BtreeCursor 型別的遊標,沒有使用索引時,遊標的型別是 BasicCursor
-
hint
可以使用 hint 來強制 MongoDB 使用一個指定的索引