mongoDB數(shù)據(jù)庫(kù)索引快速入門(mén)指南
MongoDB 索引
索引通常能夠極大的提高查詢的效率,如果沒(méi)有索引,MongoDB在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢條件的記錄。
這種掃描全集合的查詢效率是非常低的,特別在處理大量的數(shù)據(jù)時(shí),查詢可以要花費(fèi)幾十秒甚至幾分鐘,這對(duì)網(wǎng)站的性能是非常致命的。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲(chǔ)在一個(gè)易于遍歷讀取的數(shù)據(jù)集合中,索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。
mongo可以通過(guò)創(chuàng)建索引來(lái)提高查詢的速度。
1. 開(kāi)始與準(zhǔn)備數(shù)據(jù)
啟動(dòng)mongo并選擇目標(biāo)數(shù)據(jù)庫(kù)
mongo
use test
然后準(zhǔn)備一組數(shù)據(jù)(10萬(wàn)條數(shù)據(jù),較大的數(shù)據(jù)量)
for(i=0;i<100000;i++){db.test.insert({name:'test'+i,age:i})}
2. 創(chuàng)建索引前
查詢一下name為"test90000"的數(shù)據(jù)。并使用explain方法來(lái)查看查詢的性能。
db.test1.find({name:"test90000"}).explain('executionStats')
這里可以看到查詢花了53毫秒
3. 創(chuàng)建索引 createIndex
給字段name創(chuàng)建索引
db.test1.createIndex({name: 1})
查看索引:

給name創(chuàng)建索引之前,_id字段默認(rèn)為索引,創(chuàng)建后集合有兩個(gè)索引,"_id"和"name"。
4. 創(chuàng)建索引后
再次查找該條數(shù)據(jù),并查看查詢的性能,發(fā)現(xiàn)所用時(shí)間接近0毫秒。即設(shè)定索引后查詢性能大大提升了。
db.test1.find({name:"test90000"}).explain('executionStats')

5. 刪除索引
db.test1.dropIndex({name:1})
查看之
db.test1.getIndexes()

如圖,只剩下了"_id"一個(gè)索引。"name"索引已被刪除。
6.唯一索引與符合索引
①唯一索引
db.test1.createIndex({name: 1},{"unique":true})

查看索引
db.test1.getIndexes()

可以看到,unique為true。
設(shè)定為唯一索引后,該索引的值不能重復(fù)。
(這個(gè)特點(diǎn)也可以用于寫(xiě)爬蟲(chóng)時(shí)不想要某字段的重復(fù)數(shù)據(jù)時(shí),達(dá)到去重的目的。)
如圖插入一條name重復(fù)的數(shù)據(jù)時(shí),會(huì)產(chǎn)生如下報(bào)錯(cuò):

即插入失敗了。
②復(fù)合索引
創(chuàng)建多個(gè)索引的方式被稱為復(fù)合索引。
首先刪掉剛剛創(chuàng)建的索引name
db.test1.dropIndex({name:1})
然后一次創(chuàng)建name,age兩個(gè)索引
db.test1.createIndex({'name':1,'age':1})

處理海量數(shù)據(jù)時(shí),在一定的規(guī)則下使用復(fù)合索引,可以大幅提升查詢的性能.
到此這篇關(guān)于mongoDB數(shù)據(jù)庫(kù)索引快速入門(mén)指南的文章就介紹到這了,更多相關(guān)mongoDB索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux系統(tǒng)下安裝MongoDB的詳細(xì)方法圖文教程
這篇文章主要介紹了Linux系統(tǒng)下安裝MongoDB的詳細(xì)方法圖文教程,需要的朋友可以參考下2023-06-06
關(guān)于Mongodb 認(rèn)證鑒權(quán)你需要知道的一些事
最近因?yàn)閙ongodb被黑了,早先我就疑惑過(guò)怎么這東西開(kāi)啟服務(wù)就能用了,后來(lái)找了各方資料,知道MongoDB默認(rèn)是沒(méi)有鑒權(quán)的,所以這篇文章主要給大家介紹了關(guān)于Mongodb認(rèn)證鑒權(quán)你需要知道的一些事,需要的朋友可以參考下。2017-10-10
MongoDB為用戶設(shè)置訪問(wèn)權(quán)限
MongoDB已經(jīng)使用很長(zhǎng)一段時(shí)間了,基于MongoDB的數(shù)據(jù)存儲(chǔ)也一直沒(méi)有使用到權(quán)限訪問(wèn) MongoDB默認(rèn)設(shè)置為無(wú)權(quán)限訪問(wèn)限制2012-11-11
Ubuntu系統(tǒng)中安裝MongoDB及其啟動(dòng)命令mongod的教程
這篇文章主要介紹了Ubuntu系統(tǒng)中安裝MongoDB及其啟動(dòng)命令mongod的教程,包括設(shè)置MongoDB開(kāi)機(jī)啟動(dòng)的腳本示例,非常推薦,需要的朋友可以參考下2016-01-01
MongoDB4.0在windows10下的安裝與服務(wù)配置教程詳解
本文通過(guò)圖文并茂的形式給大家介紹了MongoDB4.0在windows10下的安裝與服務(wù)配置教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08
MongoDB在Windows平臺(tái)的安裝及配置方法
這篇文章主要介紹了MongoDB在Windows平臺(tái)的安裝及配置方法,簡(jiǎn)單分析了MongoDB的下載、設(shè)置方法、操作命令等具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04
MongoDB聚合分組取第一條記錄的案例與實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于MongoDB聚合分組取第一條記錄的案例與實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
MongoDB模糊查詢正則regex(類似like?和?not?like)
在類關(guān)系型數(shù)據(jù)庫(kù)中,like和not?like是常用的模糊查詢操作符,它允許我們?cè)谄ヅ渥侄蔚臅r(shí)候使用通配符,在MongoDB中,也有類似的操作符,MongoDB?可以使用?$regex?操作符來(lái)設(shè)置匹配字符串的正則表達(dá)式,MongoDB?使用?PCRE(Perl?兼容的正則表達(dá)式)作為正則表達(dá)式語(yǔ)言2024-02-02
MongoDB數(shù)據(jù)庫(kù)性能監(jiān)控詳解
MongoDB作為圖片和文檔的存儲(chǔ)數(shù)據(jù)庫(kù),為啥不直接存MySQL里,還要搭個(gè)MongoDB集群,麻不麻煩?這篇文章就帶你介紹MongoDB數(shù)據(jù)庫(kù)性能監(jiān)控,感興趣的同學(xué)可以參考閱讀2023-03-03

