纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

MongoDB索引简单理解 关于对MongoDB索引的一些简单理解

Fire♪一度   2021-09-15 我要评论
想了解关于对MongoDB索引的一些简单理解的相关内容吗Fire♪一度在本文为您仔细讲解MongoDB索引简单理解的相关知识和一些Code实例欢迎阅读和指正我们先划重点:mongodb索引类型,mongodb索引原理,mongodb基本使用下面大家一起来学习吧

索引简介

索引可以提升文档的查询速度但建立索引的过程需要使用计算与存储资源在已经建立索引的前提下插入新的文档会引起索引顺序的重排

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 多键索引

 多键索引和单键索引创建形式一样区别:字段的值值具有多个记录如数组

注意:通过 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会删除一些索引会导致性能下降

总结


相关文章

猜您喜欢

  • Java LinkedHashMap 源码解析带你了解LinkedHashMap

    想了解源码解析带你了解LinkedHashMap的相关内容吗JavaEdge.在本文为您仔细讲解Java LinkedHashMap的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java,LinkedHashMap,LinkedHashMap源码解析下面大家一起来学习吧..
  • MyBatis resultType与resultMap返回类型 详解MyBatis resultType与resultMap中的几种返回类型

    想了解详解MyBatis resultType与resultMap中的几种返回类型的相关内容吗江湖小小白在本文为您仔细讲解MyBatis resultType与resultMap返回类型的相关知识和一些Code实例欢迎阅读和指正我们先划重点:MyBatis,resultType与resultMap返回类型,MyBatis,resultType,resultMap下面大家一起来学习吧..

网友评论

Copyright 2020 www.sopisoft.net 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式