日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MongoDB索引(7)

 新進(jìn)小設(shè)計 2022-03-10

索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),可以讓我們查詢數(shù)據(jù)庫變得 更快。MongoDB 的索引幾乎與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫一模一樣,這其中也包括一些基本的查詢優(yōu)化技巧。

增加檢索的效率. mongodb提供了索引的支持.(越來越傾向于關(guān)系型數(shù)據(jù)庫)

通常建立索引的, 基本要求, 就是文檔的結(jié)構(gòu)要盡可能一致.

普通單列索引

語法:

db.集合名.ensureIndex({鍵名:1}) # 1是升序 -1是降序

測試代碼:

for(var i = 0; i < 200000; i++) {
    db.golang.insert({name:"bashlog"+i, age:i})
}

第一:先檢驗(yàn)一下查詢性能

var start = new Date()
db.golang.find({name:"bashlog187654"})
var end = new Date()
end - start

第二:為name創(chuàng)建索引

db.golang.ensureIndex({name:1})

第三:再執(zhí)行第一部分的查詢代碼可以看出有數(shù)量級的性能提升

多列索引(復(fù)合索引)

語法:

db.集合名.ensureIndex({field1:1/-1, field2:1/-1})

對name和age建立復(fù)合索引

可以使用getIndexes()查看索引的創(chuàng)建情況

該索引被創(chuàng)建后,基于 username 和 age 的查詢將會用到該索引,或者是基于 username 的查詢也會用到該索引,但是只是基于 age 的查詢將不會用到該復(fù)合索引。因此可以說, 如果想用到復(fù)合索引,必須在查詢條件中包含復(fù)合索引中的前 N 個索引列。

子文檔索引

語法:

db.集合名.ensureIndex({field.subfield:1/-1})

示例:

有如下結(jié)構(gòu)的文檔

{name:"諾基亞手機(jī)1", price:12.34, desc:{weight:100, area:"lundon"}}
{name:"諾基亞手機(jī)2", price:43.21, desc:{weight:200, area:"newYork"}}

要查詢weight等于100的文檔

db.goods.find({'desc.weight':100})

根據(jù)當(dāng)前示例,我們建立子文檔

db.集合名.ensureIndex({'desc.weight':1})

唯一索引

當(dāng)給某個列添加了唯一索引后,那么這一列的數(shù)據(jù)就必須是唯一的,如果添加重復(fù)數(shù)據(jù)就回到值報錯

語法:

db.集合名.ensureIndex({name:-1},{unique:true})

查看索引

常用命令:

(1)查看當(dāng)前索引狀態(tài):

db.集合名.getIndexes()

(2)詳情查看本次查詢使用哪個索引和查詢數(shù)據(jù)的狀態(tài)信息。

explain("executionStats")

有索引時,查詢時間

刪除索引時查詢時間

刪除索引

刪除單個索引

語法:

db.集合名.dropIndex({field:1/-1})

刪除所有索引

語法:

db.集合名.dropIndexes()

注意:在刪除所有的索引是,逐漸索引會保留。

重建索引

一個表經(jīng)過多次修改后,導(dǎo)致表的文件產(chǎn)生空洞,所以文件也是如此??梢酝ㄟ^索引的重建,減少索引文件鎖片,并提高索引的效率。

類似MySQL的optimize table 表名

語法:

db.集合名.reIndex()

索引使用注意事項(xiàng)

(1)創(chuàng)建索引的時候,注意1是正序創(chuàng)建索引 -1是倒序創(chuàng)建索引

(2)索引的創(chuàng)建在提高查詢性能的同時會影響插入性能,對于經(jīng)常查詢少插入的文檔可以考慮用索引

(3)復(fù)合索引要注意索引的先后順序。

(4)每個鍵全建立索引不一定就能提高性能,索引不是萬能的。

(5)在做排序工作的時候如果是超大數(shù)據(jù)量也可以考慮加上索引用來提高排序的性能。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多