​​​软件开发入门教程网之MongoDB 查询分析

简介: 本章将会讲解MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具。

   image.gif

    • 作者简介:每天分享MongoDB教程的学习经验、和学习笔记。
    • 座右铭:有自制力,做事有始有终;学习能力强,愿意不断地接触学习新知识。
    • 个人主页: 雪奈ie的主页

    前言

    本章将会讲解MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具。

    目录

    MongoDB 查询分析

    使用 explain()

    使用 hint()


    MongoDB 查询分析

    MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具。

    MongoDB 查询分析常用函数有:explain() 和 hint()。


    使用 explain()

    explain 操作提供了查询信息,使用索引及查询统计等。有利于我们对索引的优化。

    接下来我们在 users 集合中创建 gender 和 user_name 的索引:

    >db.users.ensureIndex({gender:1,user_name:1})

    image.gif

    现在在查询语句中使用 explain :

    >db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

    image.gif

    以上的 explain() 查询返回如下结果:

    {
       "cursor" : "BtreeCursor gender_1_user_name_1",
       "isMultiKey" : false,
       "n" : 1,
       "nscannedObjects" : 0,
       "nscanned" : 1,
       "nscannedObjectsAllPlans" : 0,
       "nscannedAllPlans" : 1,
       "scanAndOrder" : false,
       "indexOnly" : true,
       "nYields" : 0,
       "nChunkSkips" : 0,
       "millis" : 0,
       "indexBounds" : {
          "gender" : [
             [
                "M",
                "M"
             ]
          ],
          "user_name" : [
             [
                {
                   "$minElement" : 1
                },
                {
                   "$maxElement" : 1
                }
             ]
          ]
       }
    }

    image.gif

    现在,我们看看这个结果集的字段:

      • indexOnly: 字段为 true ,表示我们使用了索引。
      • cursor:因为这个查询使用了索引,MongoDB 中索引存储在B树结构中,所以这是也使用了 BtreeCursor 类型的游标。如果没有使用索引,游标的类型是 BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes集合(系统自动创建,由于存储索引信息,这个稍微会提到)来得到索引的详细信息。
      • n:当前查询返回的文档数量。
      • nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好。
      • millis:当前查询所需时间,毫秒数。
      • indexBounds:当前查询具体使用的索引。

      使用 hint()

      虽然MongoDB查询优化器一般工作的很不错,但是也可以使用 hint 来强制 MongoDB 使用一个指定的索引。

      这种方法某些情形下会提升性能。 一个有索引的 collection 并且执行一个多字段的查询(一些字段已经索引了)。

      如下查询实例指定了使用 gender 和 user_name 索引字段来查询:

      >db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})

      image.gif

      可以使用 explain() 函数来分析以上查询:

      >db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()

      image.gif

      上一篇

      MongoDB 聚合

      下一篇

      MongoDB 原子操作

      相关文章
      |
      NoSQL 测试技术 MongoDB
      微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
      本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
      266 0
      |
      11月前
      |
      存储 JSON NoSQL
      查询 MongoDB--SPL 轻量级多源混算实践 4
      SPL 支持多种数据源连接,包括 MongoDB 等 NoSQL 数据库。通过外部库形式提供驱动,灵活扩展,可实现实时数据计算与混合分析。
      |
      NoSQL MongoDB 数据库
      微服务——MongoDB实战演练——表结构分析
      本文档来源于数据库articledb,展示了一张图片资源。图片宽度为1207像素,高度607像素,采用内联显示方式。内容涉及图像处理与样式设定,适用于文档或网页设计中多媒体元素的布局参考。图片来源为cdn.nlark.com,支持webp格式并附带水印处理。
      239 1
      微服务——MongoDB实战演练——表结构分析
      |
      SQL NoSQL Java
      Java使用sql查询mongodb
      通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
      684 17
      |
      SQL NoSQL Java
      Java使用sql查询mongodb
      通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
      674 9
      |
      存储 NoSQL MongoDB
      MongoDB 查询分析
      10月更文挑战第21天
      205 1
      |
      NoSQL MongoDB 数据库
      数据库数据恢复—MongoDB数据库数据恢复案例
      MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
      |
      12月前
      |
      缓存 NoSQL Linux
      在CentOS 7系统中彻底移除MongoDB数据库的步骤
      以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
      1276 79
      |
      12月前
      |
      存储 NoSQL MongoDB
      MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
      MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
      437 8
      MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
      |
      11月前
      |
      运维 NoSQL 容灾
      告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
      程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。

      推荐镜像

      更多