索引的原理
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比孟連網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式孟連網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋孟連地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。當(dāng)往某各個集合插入多個文檔后,每個文檔在經(jīng)過底層的存儲引擎持久化后,會有一個位置信息,通過這個位置信息,就能從存儲引擎里讀出該文檔
MMAPv1:文件id+文件內(nèi)offset
WiredTiger: WiredTiger在存儲文檔時生成的一個key,通過這個key能訪問到對應(yīng) 的文檔。
CPU飆升了?半天還是沒出結(jié)果?要想提升速度,你是否想起了索引??!
建立索引后,MongoDB會額外存儲一份按age字段升序排序的索引數(shù)據(jù),索引結(jié)構(gòu)類似如下,索引通常采用類似btree的結(jié)構(gòu)持久化存儲,以保證從索引里快速找出某個age值對應(yīng)的位置信息,然后根據(jù)位置信息就能讀取出對應(yīng)的文檔。
索引就是將文檔按照某個(或某些)字段順序組織起來,以便能根據(jù)該字段高效的查詢。索引的基本作用:搜索+排序
有了索引,至少能優(yōu)化如下場景的效率:
查詢,比如查詢年齡為18的所有人。
更新/刪除,將年齡為18的所有人的信息更新或刪除,因為更新或刪除時,需要根據(jù)條件先查詢出所有符合條件的文檔,所以本質(zhì)上還是在優(yōu)化查詢。
排序,將所有人的信息按年齡排序,如果沒有索引,需要全表掃描文檔,然后再對掃描的結(jié)果進行排序。
當(dāng)存在索引時,執(zhí)行DML操作將會更慢(維護索引)。
MongoDB默認會為插入的文檔生成_id字段(如果應(yīng)用本身沒有指定該字段),_id是文檔唯一的標(biāo)識,為了保證能根據(jù)文檔id快遞查詢文檔,MongoDB默認會為集合創(chuàng)建_id字段的索引。
索引的特性
索引存儲在內(nèi)存(RAM)中,應(yīng)該確保該索引的大小不超過內(nèi)存的限制。
如果索引的大小大于內(nèi)存的限制,MongoDB會刪除一些索引,這將導(dǎo)致性能下降。
索引掃描類型:
索引覆蓋:如果所有需要的字段都在索引中,不需要額外的字段,就可以滿足索引覆蓋的要求,不再需要從數(shù)據(jù)頁加載數(shù)據(jù),這就是索引覆蓋。
索引掃描
集合掃描
索引的限制
1、每個collection限制64個索引。
2、索引名的長度不能超過125個字符。
3、一個復(fù)合索引最多可以有31個字段。
4、所有索引字段是一個數(shù)組,不能使用索引覆蓋查詢。
5、正則表達式及非操作符,如$nin,$not等;算術(shù)運算符,如$mod,等;$where子句。
6、索引越多寫性能越差,例如:一張頻繁修改的collection ,其索引達到20-30索引性能嚴重瓶頸。
7、建立索引是一個IO密集型操作,特別是當(dāng)你的集合很大的時候。包括MySQL在內(nèi)的所有支持輔助索引的數(shù)據(jù)庫系統(tǒng)都有這種情況。如果你需要在一個大集合上建立索引,可以考慮在后臺建立它。
8、如果很少對集合進行讀取,可以不使用索引
索引的類型
1、單字段索引
2、復(fù)合索引
3、多鍵索引
4、Hash索引
5、地理位圖索引
6、TTL索引
7、全文索引
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。