MongoDB學習(xi)筆記~索引提高查(cha)詢(xun)效(xiao)率
索引這(zhe)(zhe)個東(dong)西(xi)大(da)家(jia)不會(hui)陌生,只要接(jie)觸到(dao)稍(shao)微大(da)一點的數據,都會(hui)用(yong)到(dao)這(zhe)(zhe)東(dong)西(xi),它可(ke)以(yi)提(ti)升(sheng)查(cha)(cha)詢(xun)(xun)的速(su)度,相當代價就是(shi)占用(yong)了更多(duo)的存(cun)儲空間,這(zhe)(zhe)也是(shi)正常(chang)的,符合“能量守恒定(ding)理(li)”,哈哈!今天(tian)說(shuo)的是(shi)MongoDB里的索引,在我進行對500萬(wan)數據進行查(cha)(cha)詢(xun)(xun)測試時(shi),發(fa)現如果你的查(cha)(cha)詢(xun)(xun)字(zi)段不加索引,那是(shi)相當恐(kong)怖的,一個簡單的查(cha)(cha)詢(xun)(xun)(單字(zi)段)要耗時(shi)30多(duo)秒,這(zhe)(zhe)種操(cao)作(zuo),基(ji)本可(ke)以(yi)認為服務器掛了,哈哈!當為字(zi)段加了索引之后,查(cha)(cha)詢(xun)(xun)速(su)度為ms級,100毫秒以(yi)內(nei)的速(su)度真是(shi)把經(jing)興(xing)奮壞了,呵呵!
建立索引 db.tableName.ensureIndex({"fieldName",1|-1})
對(dui)于(yu)為500萬的數據加索(suo)引相當需要占用(yong)一點點時間了,不是馬(ma)上響應的,這也會正常,呵(he)呵(he)!當加完(wan)索(suo)引后(hou),你可(ke)(ke)(ke)以(yi)通過MongoVUE這種可(ke)(ke)(ke)視化工具(ju)對(dui)它進行查看(kan),或(huo)者直接用(yong)命令db.tableName.getIndexes()也可(ke)(ke)(ke)以(yi)
在選中數據(ju)庫background后(hou),我們可以看到它的集合數據(ju)和集合索(suo)引分(fen)別占用的空間
當(dang)為表(biao)(集合(he),collection)加(jia)上索引后,我們的WEB頁面測(ce)試(shi)一下可以看到(dao),頁面響應在ms級,非常快!
對于單表查詢來說(shuo),MongoDB在(zai)添加了索引后,執行(xing)的(de)速度和(he)穩(wen)定(ding)性確(que)實是可以信賴的(de),在(zai)進行(xing)復雜計(ji)算(suan)時,MongoDB也(ye)為我(wo)們提供(gong)了MapReduce功(gong)能,在(zai)以后的(de)文章中也(ye)會單獨(du)講它!