您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“MongoDB索引的簡單介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“MongoDB索引的簡單介紹”吧!
索引簡介
1.語法準(zhǔn)備
2.數(shù)據(jù)準(zhǔn)備:
3.索引
3.1 唯一索引
3.2 單鍵索引
3.3 多鍵索引
3.4 復(fù)合索引
3.5 交叉索引
3.6 部分索引
3.7覆蓋索引
3.8 全文索引
4.索引限制
4.1 查詢限制
4.2 范圍限制
索引可以提升文檔的查詢速度,但建立索引的過程需要使用計算與存儲資源,在已經(jīng)建立索引的前提下,插入新的文檔會引起索引順序的重排。
MongoDB 的索引是基于 B-tree 數(shù)據(jù)結(jié)構(gòu)及對應(yīng)算法形成的。樹索引存儲特定字段或字段集的值,按字段值排序。索引條目的排序支持有效的等式匹配和基于范圍的查詢操作。
explain() :查看執(zhí)行計劃
getIndexes() :查看所有索引
hint() : 強(qiáng)制使用某一索引進(jìn)行查詢
{ "_id" : ObjectId("6127594238754d0067383ff6"), "xh" : 1, "szly" : { "lymc" : "AA大廈", "z" : "A", "lh" : "1", "sy" : "啥意思" }, "qtxx" : { "nsssjg" : "A、區(qū)內(nèi)", "sfwkgh" : "否", "cylx" : "第三產(chǎn)業(yè)", "rzlysj" : "2011.11", "fwcqdw" : "河南置業(yè)有限公司", "fwszlc" : "5", "fjh" : "601、604", "mj" : 56, "cyry" : 5, "yzj" : 2, "qylx" : "H、其他", "ssqylx" : "C、非上市企業(yè)", "lxr" : "AA蘭", "lxdh" : "85685685" }, "sssq" : "裕鴻樓宇社區(qū)", "frxx" : { "qyfr" : "AA蘭", "qyfzr" : "AA蘭", "lxfs" : "18888888888" }, "qyjbxx" : { "xy" : "P 教育", "qymc" : "鄭州市管城回族培訓(xùn)學(xué)校", "gsyyzzh" : "31313123", "swdjzh" : "123123123", "tyxydm" : "313123123", "zcdz" : "裕鴻國際A座6層", "jjxz" : "有限責(zé)任公司", "zczb" : 100 }, "importMonth" : "202108", "batch" : "1629968706400_1", "createBy" : "1", "department" : "區(qū)政府", "createTime" : ISODate("2021-08-26T09:05:06.416Z"), "status" : 0, "ddly" : { "zh" : "", "lh" : "", "sy" : "" }, "lcxx" : { "zb" : "", "szlc" : "", "mj" : "" }, "updateBy" : "1", "updateTime" : "2021-08-27 11:14:31" }
?默認(rèn)索引:_id(唯一性的索引)
?唯一索引會保證索引對應(yīng)的鍵不會出現(xiàn)相同的值,如果唯一索引所在的字段有重復(fù)數(shù)據(jù)寫入時,拋出異常。
db.getCollection("qydrmb_copy").createIndex({"qtjbxx":1},{unique:true})
?最普通索引,不會自動創(chuàng)建。
?創(chuàng)建單建索引示例
db.getCollection("qydrmb_copy").createIndex({"qtjbxx":1}) db.getCollection("qydrmb_copy").createIndex({"qtxx.fwcqdw":1})
注意:
qydrmb_copy:集合名稱
qtjbxx:集合字段名
qtxx.fwcqdw:集合中子集合字段名
1:升序排序
-1:降序排序
?多鍵索引和單鍵索引創(chuàng)建形式一樣,區(qū)別:字段的值,值具有多個記錄,如,數(shù)組
注意:通過 getIndexes() 不能區(qū)分該索引是單鍵索引還是多鍵索引,可以 explain() 執(zhí)行計劃的打印信息中查看(isMultKey 屬性)
?復(fù)合索引針對多個字段聯(lián)合創(chuàng)建索引,先按照第一個字段排序,第一個字段相同的文檔按照第二個字段排序,依次類推。
?語法:
db.collection_name.createIndex({索引鍵名:排序規(guī)則, 索引鍵名:排序規(guī)則, ...})
?復(fù)合索引能滿足的查詢場景比單字段索引更豐富,不光能滿足多個字段組合起來的查詢,也能滿足所有能匹配符合索引前綴的查詢。
注意:創(chuàng)建一個復(fù)合索引 A、B, 查詢條件中包含A,B會走索引,查詢條件中包含A,也會走索引,查詢條件中沒有A,只有一個B,此時不會走索引。A就稱為索引前綴。
?交叉索引就是為了一個集合的多個字段分別建立索引,在查詢的時候通過多個字段作為查詢條件,這種情況稱為交叉索引。
?交叉索引和復(fù)合索引區(qū)別:交叉索引 A、B是兩個索引,復(fù)合索引中 A、B組成了一個索引。
注意:一個集合中包含交叉索引A、 B,在查詢條件中包含A、或者包含B、或者包含A、B的情況下,都會觸發(fā)交叉索引。
?部分索引是針對符合某個特定條件的文檔建立索引,3.2版本才支持該特性。
?MongoDB 部分索引只為那些在一個集合中,滿足指定的篩選條件的文檔創(chuàng)建索引。簡單理解就是部分索引是帶有過濾條件的索引,即索引只存在于某些文檔之上
語法:
db.collection_name.createIndex({索引鍵名:排序規(guī)則},{partialFilterExpression:{"前面進(jìn)行排序的鍵名":{匹配條件:條件值}}})
注意:部分索引和唯一所以一塊使用,唯一約束只適用于滿足篩選條件的文檔。
?1.所有的查詢字段是索引的一部分
?2.查詢返回的所有字段在同一個索引中
例如:如果一個索引中包含A、B 兩個字段,查詢條件只有一個A, 返回結(jié)果為 A、B兩個字段,則此時會觸發(fā)覆蓋索引,即不再掃描整個文檔,而是直接從索引中獲取數(shù)據(jù)。
?全文檢索對每一個詞建立一個索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時,檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。
?MongoDB 從 2.4 版本開始支持全文檢索,目前支持15種語言的全文索引(danish、dutch、english、finnish、french、german、hungarian、italian、norwegian、portuguese、romanian、russian、spanish、swedish、turkish)。
?mongo2.6之后默認(rèn)開啟全文檢索。
創(chuàng)建語法:
db.collection_name.ensureIndex({全文索引的字段名:"text"})
查詢語法:
db.collection_name.find({$text:{$search:"檢索的值"}})
索引不能被以下查詢使用:
正則表達(dá)式(最左匹配除外)及非操作符,如$nin,$not等
算數(shù)運(yùn)算符,如 $mod 等。
可以使用explain()來查看是否執(zhí)行了索引
集合中索引不能超過64個
索引名的長度不能超過128個字符
一個符合索引最多可以有31個字段
索引的大小不能超過內(nèi)存的限制,如果超出限制,Mongo會刪除一些索引,會導(dǎo)致性能下降。
到此,相信大家對“MongoDB索引的簡單介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。