MongoDB索引類型-基礎索引、複合索引、文檔索引、惟一索引

與關係型數據庫同樣,合理的使用索引能夠大幅提升MongoDB的查詢效率,本文介紹基礎索引、複合索引、文檔索引等幾種經常使用索引的使用。html

 

  1. 基礎索引與複合索引
  2. 文檔索引
  3. 惟一索引與強制使用索引

1. 基礎索引與複合索引

1.1 基礎索引

建立索引時,能夠是一個集合中的一個或多個字段。數據庫

如,爲用戶表usersage字段,按升序建立索引:函數

db.users.ensureIndex({age:1})

當數據庫中有大量數據時,建立索引的操做會很是耗時,咱們能夠指定backgroud:true選項:優化

db.users.ensureIndex({age:1}, {backgroud:true})

 

1.2 組合索引

爲多個字段聯合建立索引就是複合索引。spa

如,爲users表的agecity兩個字段,分別按升序和降序建立索引:code

db.users.ensureIndex({age:1, city:-1})

建立複合索引後,在使用時應當注意:查詢字段要在索引中存在,且順序一致;若是索引中的首個字段沒有出如今查詢條件中,則不會用索引。htm

 

2. 文檔索引

MongoDB能夠爲一個或多個字段建立索引,當字段是子文檔時,一樣能夠建立索引。索引

如,users表中有如下數據:ci

{name:"IT筆錄", address:{ city:"北京", district:"海淀區" }}

能夠爲address子文檔建立索引以下:文檔

db.users.ensureIndex({address:1})

創建索引後,查詢時子文檔的字段順序要和查詢順序一致:

// 會使用索引
db.users.find({address:{ city:"北京", district:"海淀區" }})
// 不會使用索引
db.users.find({address:{ district:"海淀區", city:"北京" }})

對子文檔建立索引時,也能夠只對某一個或幾個字段建立索引:

db.users.ensureIndex({"address.city":1})

 

3. 惟一索引與強制使用索引

3.1 惟一索引

在關係型數據庫中,咱們能夠爲字段建立惟一索引,以保證字段值的惟一。在MongoDB中一樣可使用惟一索引,MongoDB建立惟一索引,在建立索引時添加unique:true選項便可。

如,爲users表的email字段建立惟一索引:

db.users.ensureIndex({email:1}, {unique:true})

建立惟一索引後,當插入重複值時,MongoDB會報錯:

> db.users.insert({email:'x@itbilu.com'})
WriteResult({ "nInserted" : 1 })
>
> db.users.insert({email:'x@itbilu.com'})
WriteResult({
  "nInserted" : 0,
  "writeError" : {
    "code" : 11000,
    "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: itbilu.users.$mobile_1  dup key: { : null }"
  }
})

 

3.2 強制使用索引

在MongoDB的查詢中,若是查詢字段中的一個或幾個字段已經建立了索引,咱們可使用hint()函數來強制使用索引。hint()在查詢中是很是有效的一種優化手段:

如,咱們要查詢users表中的多個字段,查詢字段中的age字段建立過索引,可使用hint()來強制傅索引查詢:

db.users.find({name:'IT筆錄', age:3}).hint({age:1})

下一篇:MongoDB地理空間(2d)索引建立與查詢

相關文章
相關標籤/搜索