代码编织梦想

查询分析是衡量数据库和索引设计有效性的一个非常重要的方式。

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


使用 explain()

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

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

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

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

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

以上的 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
            }
         ]
      ]
   }
}

关于上面的运行结果,有以下几点需要说明:

  • indexOnly:若字段的值为 true,则表示此查询中使用了索引;
  • cursor:指定使用的游标类型,BTreeCursor 类型表示使用了索引,还提供了所用索引的名称,BasicCursor 表示在不使用任何索引的情况下进行了完全扫描;
  • n:表示返回的匹配文档数;
  • nscannedObjects:表示扫描文档的总数;
  • nscanned:表示扫描的文档或索引条目的总数。

$hint


使用 hint()

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

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

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

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luoyingdegesheng/article/details/128812329

mongodb查询语句效率分析-爱代码爱编程

准备工作 安装最新版的mongodb.安装免费的图形客户端Robo 3T在数据库local下创建一个名为test的collection创建索引db.test.createIndex( { a: -1, b:-1 }, {n

mongodb 搜索速度_mongodb 查询性能分析-爱代码爱编程

对queryPlanner分析 queryPlanner : queryPlanner 的返回 queryPlanner.namespace : 该值返回的是该query所查询的表 queryPlanner.indexFilterSet : 针对该query是否有indexfilter queryPlanner.winningPlan : 查询

mongodb查询语句时间范围_mongodb之慢查询分析-爱代码爱编程

0  摘要 在MySQL中,慢查询日志是经常作为我们优化查询的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是开启Profiling功能。该工具在运行的实例上收集有关MongoDB的写操作,游标,数据库命令等,可以在数据库级别开启该工具,也可以在实例级别开启。该工具会把收集到的所有都写入到system.profile集合中,该集合是

Mongodb查询分析器解析-爱代码爱编程

Mongodb查询分析器 动态相关项目中涉及到数据量大和吞吐量的接口,例如关注页面动态,附近动态,这部分数据都是存储在mongodb中,在线上数据中分类两个mongodb集合存储其中关注动态基于扩散写的设计,数据量已经快到 8 亿。附近动态并没有写扩散的数据扩大,并且曝光量相比关注页面少一点,并且重要的是有TTL,因此附近动态相关的表数据50万以上在大数

mongodb入门(特点,使用场景,命令行操作,springdata-mongodb)-爱代码爱编程

今天我们将通过这一篇博客来了解MongoDB的体系结构,命令行操作和在JAVA 当中使用SpringData-MongoDB 来 操作MongoDB。 如果没有安装的小伙伴 可以看一下 这篇文章 (59条消息) 开源的文档

java面试系列-mongodb-爱代码爱编程

什么是MongoDB?为什么使用MongoDB? MongoDB是面向文档的NoSQL数据库,用于大量数据存储。MongoDB是一个在2000年代中期问世的数据库。属于NoSQL数据库的类别。以下是一些为什么应该开始使用MongoDB的原因 面向文档的–由于MongoDB是NoSQL类型的数据库,它不是以关系类型的格式存储数据,而是将数据存储在文档

mongodb下载与安装-爱代码爱编程

Mongodb下载https://pan.baidu.com/s/1mFRK3Cn0jW_ysmC9HaGvzg  提取码:0068    下载完成后解压; 设置数据存储位置: bin目录新建文件夹: data下再新建db文件夹:    bin目录下cmd;   设置数据存储位置: mongod --dbpath=..\d

mongodb的索引操作-爱代码爱编程

Mongodb的索引操作 学习目标 掌握 mongodb索引的创建,删除操作掌握 mongodb查看索引的方法掌握 mongodb创建唯一索引的方法 1. 为什么mongdb需要创建索引 加快查询速度进行数据的去

mongodb查询分析常用函数explain()-爱代码爱编程

MongoDB 查询分析可以确保我们建议的索引是否有效,是查询语句性能分析的重要工具 explain 操作提供了查询信息,使用索引及查询统计等。有利于我们对索引的优化。 db.collection.explain()简介

二十、express框架连接mongodb数据库操作_express连接mongodb-爱代码爱编程

         在上一篇中已经在Node.js中引入使用了mongoose进行MongoDB数据库的基本操作,在本篇当中在Express框架中来连接数据库以及操作数据库;  Express 项目环境          这里是通过全局安装Express框架生产的项目环境,也可以通过局部安装的方式,安装过程可以在往期的篇目中去看一下,附上链