1. 索引 索引支持查詢的有效地提高效率。沒有索引,MongoDB必須掃描集合的每個文檔,以選擇與查詢語句匹配的文檔。這種掃描效率很低,需要MongoDB處理大量的數據。 索引是特殊的數據結構,以易於遍歷的形式存儲數據集的一小部分。 索引存儲特定欄位或一組欄位的值,按照索引中指定的欄位值排序。 1. ...
1. 索引
索引支持查詢的有效地提高效率。沒有索引,MongoDB必須掃描集合的每個文檔,以選擇與查詢語句匹配的文檔。這種掃描效率很低,需要MongoDB處理大量的數據。
索引是特殊的數據結構,以易於遍歷的形式存儲數據集的一小部分。 索引存儲特定欄位或一組欄位的值,按照索引中指定的欄位值排序。
1.1 索引案例
首先創建大量數據。
向集合中插入10萬條文檔。
for(i=0;i<100000;i++){ db.t1.insert({name:'test'+i, age:i}) }
然後進行數據查找性能分析。
查找姓名為'test10000'的文檔。
db.t1.find({name:'test10000'})
使用explain()命令進行查詢性能分析。
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()方法也接受選項列表(可選)。
以下是列表:
參數 |
類型 |
描述 |
---|---|---|
|
|
在後臺構建索引,以便構建索引不會阻止其他資料庫活動,則指定 |
|
|
創建一個唯一的索引,使得集合不會接受索引鍵或鍵匹配索引中現有值的文檔的插入。 指定 |
|
|
索引的名稱。如果未指定,則MongoDB通過連接索引欄位的名稱和排序順序來生成索引名稱。 |
|
|
在可能有重覆項的欄位上創建唯一索引。MongoDB僅索引第一次出現的鍵,並從集合中刪除包含該鍵的後續出現的所有文檔。指定 |
|
|
如果為 |
|
|
指定一個值(以秒為單位)作為 |
|
索引版本 |
索引版本號。預設索引版本取決於創建索引時運行的MongoDB的版本。 |
|
文檔 |
權重是從 |
|
|
對於文本索引,確定停止詞列表的語言以及句柄和分詞器的規則。 預設值為英文。 |
|
|
對於文本索引,要指定文檔中包含覆蓋預設語言的欄位名稱。預設值為 |
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()