美文网首页
MongoDB覆盖索引查询 和 高级索引

MongoDB覆盖索引查询 和 高级索引

作者: EmmaQin | 来源:发表于2021-02-26 16:16 被阅读0次

覆盖索引

官方的MongoDB的文档中说明,覆盖查询是以下的查询:

  • 所有的查询字段是索引的一部分
  • 所有的查询返回字段在同一个索引中
    由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。
    因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。

不能使用覆盖索引查询:

  • 所有索引字段是一个数组
  • 所有索引字段是一个子文档
覆盖索引实践(客户端为navicat)

文档集合(demo_auto)

db.getCollection("demo_auto").insert([ {
    _id: ObjectId("603746d62ff96a0006bea3d5"),
    name: "戚薇",
    gender: "女",
    age: "12"
} ]);
db.getCollection("demo_auto").insert([ {
    _id: ObjectId("603750ab5f3ee121e806620a"),
    name: "李沁",
    age: 10,
    gender: "女"
} ]);
db.getCollection("demo_auto").insert([ {
    _id: ObjectId("603774a85f3ee121e806620c"),
    gender: "男",
    name: "戚薇"
} ]);

1.新建索引gender_1_name_1



2.用覆盖索引查询(将_id排除查询返回字段),检查文档为0,说明查询没有扫描文档,只用了索引


截屏2021-02-26 下午4.01.22.png
3.返回字段不排除_id,则覆盖索引不起效,会扫描文档

高级索引

文档集合(demo_auto)

db.getCollection("demo_auto").insert([ {
    name: "大名",
    gender: "女",
    age: "12",
        tags:[
          "music",
      "cricket",
      "blogs"
        ],
    children:{
           name:"小会",
           age:10
        }
} ]);

以上文档包含了tags数组和children子文档。

索引数组字段建索引

在数组中创建索引,需要对数组中的每个字段依次建立索引。所以在我们为数组 tags 创建索引时,会为 music、cricket、blogs三个值建立单独的索引。

db.demo_auto.ensureIndex({"tags":1})


创建索引后,我们可以这样检索集合的 tags 字段:

db.demo_auto.find({tags: "cricket"}).explain()



以上命令执行结果中会显示使用索引tags_1,则表示已经使用了索引。

索引子文档字段

假设我们需要通过子文档的字段来检索文档,所以我们需要对子文档建立索引。
为子文档的三个字段创建索引,命令如下:

db.demo_auto.ensureIndex({"children.name":1,"children.age":1})


通过以下查询语句来检索集合children字段:

db.demo_auto.find({"children.name": "小会"}).explain()



以上命令执行结果中会显示使用索引children_index,则表示已经使用了索引。

相关文章

  • MongoDB覆盖索引查询 和 高级索引

    覆盖索引 官方的MongoDB的文档中说明,覆盖查询是以下的查询: 所有的查询字段是索引的一部分 所有的查询返回字...

  • MongoDB学习报告(二)

    概述 MongoDB索引管理MongoDB查询优化 MongoDB索引管理 单键索引中的每一项都应该对应被索引文档...

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • Mongodb 07-索引

    ================ 索引 ================ 索引支持在MongoDB中高效地执行查询...

  • 你知道MongoDB的10种索引吗?

    为什么要有索引 查询快! 查询快! 查询快! MongoDB的10种索引? 创建索引语法: 我们的record C...

  • mongodb笔记04--索引

    索引: 索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引 在mongodb中,索引可以按字...

  • mongodb常用操作

    多条件查询 单条件查询 排序 查看集合索引 添加单个索引 添加多个索引 查看mongodb表大小 stats() ...

  • mongoDB入门二

    索引 索引能够使得MongoDB更高效得执行查询。如果没有索引,MongoDB必须执行集合扫描,即扫描集合中的每个...

  • MongoDB索引与优化详解

    在MongoDB中通过建立索引可以进行高效的查询,如果没有索引MongoDB将会扫描整个集合与查询的条件进行匹配,...

  • MongoDB基础之索引详解

    1 索引 1.1 简介 1.1.1 索引定义 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取...

网友评论

      本文标题:MongoDB覆盖索引查询 和 高级索引

      本文链接:https://www.haomeiwen.com/subject/ixrmfltx.html