Index 能夠提高查詢的性能,如果沒有Index,MongoDB必須掃描整個collection,從collection的第一個doc開始,直到最后一個doc,即使第一個doc之后的所有doc都不滿足查詢條件。如果在Collection上有合適的Index,例如,unique index,那么MongoDB在按照index key查找到一個doc之后,就不會繼續(xù)對其他doc查詢,極大地提高查詢性能。

MongoDB的 Index 結(jié)構(gòu)跟關(guān)系型DB的NonClustered Index相似,都是BTree結(jié)構(gòu),在每個leaf node中,除了index key之外,還存儲相應doc在disk上的地址。在MongoDB中,沒有clustered index,因此,Collection初始的物理存儲跟doc插入的順序有關(guān),MongoDB按照doc插入的順序,依次將doc存儲在disk上,插入順序上相鄰的doc在disk的物理位置上也是相鄰的;對doc的修改可能對 collection 的物理存儲發(fā)生變化,如果doc的修改不會導致doc的size增加,那么doc會繼續(xù)存儲在原來的存儲空間中,而不會對collection的物理存儲有影響,一旦修改操作導致doc的size增加,導致doc發(fā)生移動,那么collection的物理存儲就會發(fā)生變化。

一,doc的移動影響collection的物理存儲

如果數(shù)據(jù)修改增加了doc的size,使其不能繼續(xù)存放在原來的存儲空間中,那么MongoDB必須將其移動到collection的末尾,原先的存儲空間被閑置,導致doc的存儲密度下降,會嚴重影響查詢性能。doc的移動過程是非常慢的,相當于在一個原子操作中,先做doc的 delete 操作,后做doc的 insert 操作。

doc移動的過程如下圖所示:

對doc B進行修改,使其Size增大,原先的位置不能容納B,MongoDB將B移動在Collection的末尾。原來的存儲空間被閑置。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設(shè)計培訓,網(wǎng)站建設(shè)培訓學習是年輕人改變自己的最好方式