MongoDB(八):索引

1. 索引

索引支持查詢的有效地提升效率。沒有索引,MongoDB必須掃描集合的每一個文檔,以選擇與查詢語句匹配的文檔。這種掃描效率很低,須要MongoDB處理大量的數據。數據庫

索引是特殊的數據結構,以易於遍歷的形式存儲數據集的一小部分。 索引存儲特定字段或一組字段的值,按照索引中指定的字段值排序。數據結構

1.1 索引案例

首先建立大量數據。ide

向集合中插入10萬條文檔。性能

for(i=0;i<100000;i++){
db.t1.insert({name:'test'+i, age:i})
}

而後進行數據查找性能分析。spa

查找姓名爲'test10000'的文檔。code

db.t1.find({name:'test10000'})

使用explain()命令進行查詢性能分析。blog

db.t1.find({name:'test10000'}).explain('executionStats')

其中的executionStats下的executionTimeMillis表示總體查詢時間,單位是毫秒。排序

性能分析結果以下:索引

 

而後咱們建立索引。文檔

1表示升序,-1表示降序。 

db.集合.ensureIndex({屬性:1})
如
db.t1.ensureIndex({name:1})

執行上面相同的查詢,並進行查詢性能分析。

db.t1.find({name:'test10000'}).explain('executionStats')

性能分析結果以下:

 

1.2 ensureIndex()方法

建立索引,須要使用MongoDB的ensureIndex()方法。

語法:

db.COLLECTION_NAME.ensureIndex({KEY:1})

這裏的key是要在其上建立索引的字段的名稱。

ensureIndex()方法也接受選項列表(可選)。

如下是列表:

參數  

類型

描述

background

Boolean

在後臺構建索引,以便構建索引不會阻止其餘數據庫活動,則指定background的值爲true。默認值爲false

unique

Boolean

建立一個惟一的索引,使得集合不會接受索引鍵或鍵匹配索引中現有值的文檔的插入。 指定true以建立惟一索引。 默認值爲false

name

String

索引的名稱。若是未指定,則MongoDB經過鏈接索引字段的名稱和排序順序來生成索引名稱。

dropDups

Boolean

在可能有重複項的字段上建立惟一索引。MongoDB僅索引第一次出現的鍵,並從集合中刪除包含該鍵的後續出現的全部文檔。指定true以建立惟一索引。 默認值爲false

sparse

Boolean

若是爲true,則索引僅引用具備指定字段的文檔。這些索引在某些狀況下(特別是排序)使用的空間較小,但行爲不一樣。默認值爲false

expireAfterSeconds

integer

指定一個值(以秒爲單位)做爲TTL,以控制MongoDB在此集合中保留文檔的時間。

v

索引版本

索引版本號。默認索引版本取決於建立索引時運行的MongoDB的版本。

weights

文檔

權重是從199999之間的數字,而且表示該字段相對於其餘索引字段在分數方面的意義。

default_language

String

對於文本索引,肯定中止詞列表的語言以及句柄和分詞器的規則。 默認值爲英文。

language_override

String

對於文本索引,要指定文檔中包含覆蓋默認語言的字段名稱。默認值爲language

1.3 索引的命令

創建惟一全部,實現惟一約束的功能。

db.t1.ensureIndex({"name":1},{"unique":true})

聯合全部,對多個屬性創建一個索引,按照find()出現的順序。

db.t1.ensureIndex({name:1,age:1})

查看文檔全部索引。

db.t1.getIndexes()

查看集合索引大小。

db.t1.totalIndexSize()

刪除索引。

db.ti.dropIndexes('索引名稱')

刪除集合全部索引。

db.t1.dropIndexes()
相關文章
相關標籤/搜索