溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB索引的簡單介紹

發布時間:2021-09-15 10:52:17 來源:億速云 閱讀:145 作者:chen 欄目:開發技術

本篇內容主要講解“MongoDB索引的簡單介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MongoDB索引的簡單介紹”吧!

目錄
  • 索引簡介

  • 1.語法準備

  • 2.數據準備:

  • 3.索引

    • 3.1 唯一索引

    • 3.2 單鍵索引

    • 3.3 多鍵索引

    • 3.4 復合索引

    • 3.5 交叉索引

    • 3.6 部分索引

    • 3.7覆蓋索引

    • 3.8 全文索引

  • 4.索引限制

    • 4.1 查詢限制

    • 4.2 范圍限制


索引簡介

索引可以提升文檔的查詢速度,但建立索引的過程需要使用計算與存儲資源,在已經建立索引的前提下,插入新的文檔會引起索引順序的重排。

MongoDB 的索引是基于 B-tree 數據結構及對應算法形成的。樹索引存儲特定字段或字段集的值,按字段值排序。索引條目的排序支持有效的等式匹配和基于范圍的查詢操作。

1.語法準備

  • explain() :查看執行計劃

  • getIndexes() :查看所有索引

  • hint() : 強制使用某一索引進行查詢

2.數據準備:

{
    "_id" : ObjectId("6127594238754d0067383ff6"),
    "xh" : 1,
    "szly" : {
        "lymc" : "AA大廈",
        "z" : "A",
        "lh" : "1",
        "sy" : "啥意思"
    },
    "qtxx" : {
        "nsssjg" : "A、區內",
        "sfwkgh" : "否",
        "cylx" : "第三產業",
        "rzlysj" : "2011.11",
        "fwcqdw" : "河南置業有限公司",
        "fwszlc" : "5",
        "fjh" : "601、604",
        "mj" : 56,
        "cyry" : 5,
        "yzj" : 2,
        "qylx" : "H、其他",
        "ssqylx" : "C、非上市企業",
        "lxr" : "AA蘭",
        "lxdh" : "85685685"
    },
    "sssq" : "裕鴻樓宇社區",
    "frxx" : {
        "qyfr" : "AA蘭",
        "qyfzr" : "AA蘭",
        "lxfs" : "18888888888"
    },
    "qyjbxx" : {
        "xy" : "P 教育",
        "qymc" : "鄭州市管城回族培訓學校",
        "gsyyzzh" : "31313123",
        "swdjzh" : "123123123",
        "tyxydm" : "313123123",
        "zcdz" : "裕鴻國際A座6層",
        "jjxz" : "有限責任公司",
        "zczb" : 100
    },
    "importMonth" : "202108",
    "batch" : "1629968706400_1",
    "createBy" : "1",
    "department" : "區政府",
    "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"
}

3.索引

3.1 唯一索引

?默認索引:_id(唯一性的索引)

?唯一索引會保證索引對應的鍵不會出現相同的值,如果唯一索引所在的字段有重復數據寫入時,拋出異常。

db.getCollection("qydrmb_copy").createIndex({"qtjbxx":1},{unique:true})

3.2 單鍵索引

?最普通索引,不會自動創建。

?創建單建索引示例

db.getCollection("qydrmb_copy").createIndex({"qtjbxx":1})

db.getCollection("qydrmb_copy").createIndex({"qtxx.fwcqdw":1})

注意:

  • qydrmb_copy:集合名稱

  • qtjbxx:集合字段名

  • qtxx.fwcqdw:集合中子集合字段名

  • 1:升序排序

  • -1:降序排序

3.3 多鍵索引

?多鍵索引和單鍵索引創建形式一樣,區別:字段的值,值具有多個記錄,如,數組

MongoDB索引的簡單介紹

注意:通過 getIndexes() 不能區分該索引是單鍵索引還是多鍵索引,可以 explain() 執行計劃的打印信息中查看(isMultKey 屬性)

3.4 復合索引

?復合索引針對多個字段聯合創建索引,先按照第一個字段排序,第一個字段相同的文檔按照第二個字段排序,依次類推。

?語法:

db.collection_name.createIndex({索引鍵名:排序規則, 索引鍵名:排序規則, ...})

?復合索引能滿足的查詢場景比單字段索引更豐富,不光能滿足多個字段組合起來的查詢,也能滿足所有能匹配符合索引前綴的查詢。

注意:創建一個復合索引 A、B, 查詢條件中包含A,B會走索引,查詢條件中包含A,也會走索引,查詢條件中沒有A,只有一個B,此時不會走索引。A就稱為索引前綴。

3.5 交叉索引

?交叉索引就是為了一個集合的多個字段分別建立索引,在查詢的時候通過多個字段作為查詢條件,這種情況稱為交叉索引。

?交叉索引和復合索引區別:交叉索引 A、B是兩個索引,復合索引中 A、B組成了一個索引。

注意:一個集合中包含交叉索引A、 B,在查詢條件中包含A、或者包含B、或者包含A、B的情況下,都會觸發交叉索引。

3.6 部分索引

?部分索引是針對符合某個特定條件的文檔建立索引,3.2版本才支持該特性。

?MongoDB 部分索引只為那些在一個集合中,滿足指定的篩選條件的文檔創建索引。簡單理解就是部分索引是帶有過濾條件的索引,即索引只存在于某些文檔之上

語法:

db.collection_name.createIndex({索引鍵名:排序規則},{partialFilterExpression:{"前面進行排序的鍵名":{匹配條件:條件值}}})

注意:部分索引和唯一所以一塊使用,唯一約束只適用于滿足篩選條件的文檔。

3.7覆蓋索引

?1.所有的查詢字段是索引的一部分

?2.查詢返回的所有字段在同一個索引中

例如:如果一個索引中包含A、B 兩個字段,查詢條件只有一個A, 返回結果為 A、B兩個字段,則此時會觸發覆蓋索引,即不再掃描整個文檔,而是直接從索引中獲取數據。

3.8 全文索引

?全文檢索對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置,當用戶查詢時,檢索程序就根據事先建立的索引進行查找,并將查找的結果反饋給用戶的檢索方式。

?MongoDB 從 2.4 版本開始支持全文檢索,目前支持15種語言的全文索引(danish、dutch、english、finnish、french、german、hungarian、italian、norwegian、portuguese、romanian、russian、spanish、swedish、turkish)。

?mongo2.6之后默認開啟全文檢索。

創建語法:

db.collection_name.ensureIndex({全文索引的字段名:"text"})

查詢語法:

db.collection_name.find({$text:{$search:"檢索的值"}})

4.索引限制

4.1 查詢限制

  • 索引不能被以下查詢使用:

  • 正則表達式(最左匹配除外)及非操作符,如$nin,$not等

  • 算數運算符,如 $mod 等。

  • 可以使用explain()來查看是否執行了索引

4.2 范圍限制

  • 集合中索引不能超過64個

  • 索引名的長度不能超過128個字符

  • 一個符合索引最多可以有31個字段

  • 索引的大小不能超過內存的限制,如果超出限制,Mongo會刪除一些索引,會導致性能下降。

到此,相信大家對“MongoDB索引的簡單介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女