mongoDB 性能优化

文章目录

  • 前言
    • mongoDB 性能优化
      • 1. explain方法来查看查询的执行计划
      • 2. 查看mongoDB 集合的索引
      • 3. mongoDB 怎么添加索引
      • 4. 升序索引与降序索引是什么意思

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


mongoDB 性能优化

1. explain方法来查看查询的执行计划

使用explain方法来查看查询的执行计划。explain方法提供了关于查询性能的详细信息,包括查询使用的索引、文档的扫描数量等。

db.collection.find(query).explain("executionStats")

executionStats参数告诉MongoDB只返回执行统计信息。
示例:
在这里插入图片描述

在这里插入图片描述

执行上述查询后,MongoDB会返回一个包含执行计划信息的文档。你可以查看该文档来分析查询的性能。

  • plannerVersion: 查询规划器的版本。
  • namespace: 查询的命名空间(数据库和集合)。
  • executionSuccess: 指示查询是否成功执行。
  • nReturned: 返回的文档数量。
  • executionTimeMillis: 查询的执行时间(以毫秒为单位)。
  • winningPlan,它提供了MongoDB选择的执行计划的详细信息,包括使用的索引、扫描的文档数量等。
    winningPlan是MongoDB查询执行计划中的一个关键部分,它描述了MongoDB选择的执行计划,包括使用的索引、查询策略等。分析winningPlan可以帮助你了解MongoDB是如何执行查询的,以便更好地优化查询性能。
    以下是一些常见的要点,可以帮助你分析winningPlan:
  1. 查询的阶段(Stage): winningPlan中的stage字段描述了MongoDB执行查询的主要阶段。常见的阶段包括COLLSCAN(集合扫描)、IXSCAN(索引扫描)、FETCH(从索引中获取文档)等。了解查询的主要阶段有助于确定查询性能的瓶颈。
  2. 索引使用: 如果winningPlan中的阶段是IXSCAN,表示MongoDB正在使用一个或多个索引来执行查询。你可以查看winningPlan中的inputStage字段,以了解使用的具体索引。优化索引的选择和使用可以显著提高查询性能。
  3. 筛选条件: winningPlan中的filter字段描述了用于筛选文档的条件。这可以帮助你确定MongoDB是否有效地使用索引来减少文档扫描的数量。
  4. 索引覆盖: 如果winningPlan中的阶段是FETCH,表示MongoDB在索引扫描后需要额外的步骤来获取文档。优化查询性能的一种方式是尽量让索引覆盖查询,即索引本身包含了查询所需的字段,而无需额外获取文档。
  5. 文档数量: winningPlan中通常包括有关查询返回的文档数量的信息,如nReturned。这对于评估查询的效率和性能至关重要。
  6. 排序和限制: 如果查询中包括排序和限制条件,winningPlan中也会包含这些信息。排序和限制条件可能会影响查询性能,特别是如果没有适当的索引支持。
  7. 索引覆盖: 查询计划中的 indexOnly 指示是否使用了索引覆盖,即查询结果是否可以完全从索引中获取,而无需额外的文档检索。索引覆盖可以显著提高查询性能。
  8. 其他信息: winningPlan中可能还包含其他信息,例如direction字段用于表示索引扫描的方向(正向或反向),以及其他执行计划相关的信息。
    综合分析上述信息,你可以确定查询性能的瓶颈,并采取相应的优化措施,例如创建合适的索引、调整查询条件、减少文档扫描等,以提高查询的效率和性能。请注意,分析查询计划可能需要一定的经验,特别是在复杂的查询场景中,但它是优化MongoDB查询性能的关键步骤。

2. 查看mongoDB 集合的索引

use your_database 
db.myCollection.getIndexes()

示例:
在这里插入图片描述

  1. key: 这部分指示了索引的字段和排序方式。在你的示例中,“_id”: 1 表示这个索引是基于 _id 字段创建的,而 1 表示按升序排序。MongoDB默认为每个集合创建一个唯一索引,用于快速查找文档。
  2. name: 这是索引的名称。在你的示例中,索引名称是 “id”,这是默认的命名规则,通常是字段名加下划线。
  3. ns: 这是索引所属的命名空间。在你的示例中,索引属于 “scfop-api-partner” 数据库中的 “dataSyncRequestVO” 集合。
  4. v: 这是索引版本的信息。在你的示例中,版本号为 2,这表示索引是MongoDB的版本2索引格式。
    总结来说,这个输出告诉你在 “scfop-api-partner” 数据库的 “dataSyncRequestVO” 集合上存在一个名为 “id” 的索引,它是一个升序索引,用于加速对 _id 字段的查找。这个索引通常是自动生成的,以确保每个文档都有唯一的 _id 值,这是MongoDB文档的默认主键。

3. mongoDB 怎么添加索引

使用db.collection.createIndex()方法来创建索引。这个方法用于在指定集合上创建一个或多个索引。

这将在名为 “yourCollection” 的集合上创建一个基于 “yourField” 字段的升序索引。

db.yourCollection.createIndex({ yourField: 1 });

创建多个单索引:

db.yourCollection.createIndexes([{'yourField':1},{'yourField':1},{'yourField':1}])

如果你想创建一个复合索引(多个字段的组合索引),可以传递一个包含多个字段和排序方式的对象:

db.yourCollection.createIndex({ field1: 1, field2: -1 });

这将在名为 “yourCollection” 的集合上创建一个基于 “field1” 字段升序和 “field2” 字段降序的复合索引。

你也可以指定其他选项来定制索引,例如唯一索引、稀疏索引等。这些选项可以作为第二个参数传递给 createIndex() 方法。

db.yourCollection.createIndex({ yourField: 1 }, { unique: true, sparse: true });

在这个例子中,我们创建了一个唯一索引,该索引只包含具有 “yourField” 字段的文档,并且该字段可以有缺失值(稀疏索引)。
记得在使用索引前,要考虑你的数据模型、查询模式和性能需求来选择合适的索引策略。索引可以显著提高查询效率,但不当使用也可能会导致资源浪费和性能下降。

4. 升序索引与降序索引是什么意思

升序索引(Ascending Index):
升序索引是最常见的索引类型,也是MongoDB默认创建的索引类型。在升序索引中,索引键的值按照从小到大(A到Z、0到9)的顺序排序。升序索引在排序字段上提供了高效的查询性能,因为它使得MongoDB可以快速定位和遍历索引,尤其是在范围查询(例如 g t 、 gt、 gtlt)和排序操作中。
在MongoDB中,如果你创建一个索引而没有明确指定排序方式,MongoDB将默认使用升序索引。
例如,以下命令将创建一个基于字段 fieldName 的升序索引:

db.collection.createIndex({ fieldName: 1 });

降序索引(Descending Index):
降序索引与升序索引相反,它按照从大到小(Z到A、9到0)的顺序排序索引键的值。降序索引在某些查询场景中也可以提供性能优势,尤其是在需要按照字段降序排序的查询操作中。
你可以通过将字段的排序方式设置为 -1 来创建一个降序索引。例如:

db.collection.createIndex({ fieldName: -1 });

这将创建一个基于 fieldName 字段的降序索引。
需要注意的是,使用降序索引可能会增加索引的维护成本,因为MongoDB需要额外的空间和计算来维护降序索引。因此,在选择索引排序方式时,需要根据实际的查询需求和性能测试结果来决定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java_Stream API

文章目录 一、Stream API vs 集合二、Stream 使用的执行流程2.1、创建Stream2.1、中间操作2.1.1. filter2.1.2. limit2.1.3. skip2.1.4. distinct2.1.5. map2.1.6. sorted 一、Stream API vs 集合 Stream API 关注的是多个数据的计算(排序、查找、过滤、映射、遍历…

服务器感染了.360、.halo勒索病毒,如何确保数据文件完整恢复?

导言: 数据的安全性至关重要,但威胁不断进化,.360、.halo勒索病毒是其中的令人担忧的勒索软件。本文91数据恢复将深入介绍.360、.halo勒索病毒,包括其威胁本质、数据恢复方法和如何采取预防措施来保护您的数据。 如果受感染的数据…

【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说下你的vue项目的目录结…

基于html5开发的Win12网页版,抢先体验

据 MSPoweruser 报道,Windows 11虽然刚刚开始步入正轨,但最新爆料称微软已经在开启下一个计划,Windows 12 的开发将在 去年3 月份开始。德国科技网站 Deskmodder.de 称,根据内部消息,微软将在 2022年3 月开始开发 Wind…

设计模式-11种行为型模式

行为型模式可以影响一个系统的状态和行为流。 责任链模式: 定义一个抽象处理者,其中包含了设置了下一个处理者和对请求的处理两个方法。具体的处理者都实现了这个接口。用于处理多级请,可以将多个处理者对象串联起来,每个处理者都…

1、验证1101序列(Moore)

题目要求: 用Moore型状态机验证1101序列。 题目描述: 用使用状态机验证1101序列,注意:允许重复子序列。如图 端口描述: module moore_1101(input clk,//时钟信号input clr,//reset复位信号,高电平有效in…

pdf处理工具 Enfocus PitStop Pro 2022 中文 for mac

Enfocus PitStop Pro 2022是一款专业的PDF预检和编辑软件,旨在帮助用户提高生产效率、确保印刷品质量并减少错误。以下是该软件的一些特色功能: PDF预检。PitStop Pro可以自动检测和修复常见的PDF文件问题,如缺失字体、图像分辨率低、颜色空…

在Android平板上使用code-server公网远程Ubuntu服务器编程

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以,这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

​EtherNet/IP 库卡机器人和EtherCAT倍福PLC总线协议连接案例​

EtherNet/IP 是一种适合于工业环境和对时间要求比较苛刻的应用的网络。而远创智控YC-EIPM-ECT通讯网关,是一款自主研发的EtherNet/IP 从站功能的通讯网关。它不仅可以实现EtherNet/IP 和EtherCAT的无缝连接,还可以将EtherNet/IP 作为从站连接到EtherCAT总…

嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)

目录 前言 一、sqlite概念和特性 二、sqlite安装 三、sqlite3数据类型 四、sqlite数据库约束 五、sqlite常用命令 六、SQL语句(增删改查) 七、sqlite使用实例(教学管理数据库) 总结 前言 数据在实际工作中应用非常广泛…

【LLM微调范式1】Prefix-Tuning: Optimizing Continuous Prompts for Generation

论文标题:Prefix-Tuning: Optimizing Continuous Prompts for Generation 论文作者:Xiang Lisa Li, Percy Liang 论文原文:https://arxiv.org/abs/2101.00190 论文出处:ACL 2021 论文被引:1588(2023/10/14&…

目录启示:使用 use 关键字为命名空间内的元素建立非限定名称

文章目录 参考环境三种名称非限定名称限定名称完全限定名称举个栗子 useuse 关键字use ... as .. 命名冲突真假美猴王两个世界 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型、ChatGPTPHP 官方PHP ManualPHP 官方language.namespaces.ra…

HTML复习笔记

HTML(超文本标记语言) 文章目录 HTML(超文本标记语言)1.HTML1.概念2.标签2.1双标签超链接音频标签视频标签无序列表有序列表定义列表表格合并单元格 表单表单项单选框-**radio**文件上传-file多选框-checkbox 下拉菜单文本域-text…

Unity 3D视频教程

上一篇:各种品牌汽车车标 记录了一些车标。 在懂车帝App上,会有3D看车功能。最近发现一个Unity 3D的视频教程,分享下! https://www.bilibili.com/video/BV1TZ4y1o76s/

JavaSE学习值之--认识异常

💕"有效知识的前提是承认知识边界,承认我们对边界那边的一切无可奉告。"💕 作者:Mylvzi 文章主要内容:JavaSE学习值之--认识异常 一.什么是异常? 异常就是程序在运行的时候产生的不正常的行为 …

linux上构建任意版本的rocketmq多架构x86 arm镜像——筑梦之路

现状 目前市面上和官方均只有rocketmq x86架构下的docker镜像,而随着国产化和信创适配的需求越来越多,显然现有的x86架构下的docker镜像不能满足多样化的需求,因此我们需要根据官方发布的版本制作满足需求的多架构镜像,以在不同cp…

Ubuntu的Python从2.x升级到3.x

我的Ubuntu系统默认是2.7,我想升级为3.5 升级python3.5 下载python sudo apt-get install python3查看 刚才下载的Python程序被安装在usr/local/lib/python3.5 中 cd usr/local/lib备份一下 sudo cp /usr/bin/python /usr/bin/python_bak删除python的旧关联 sudo rm -rf py…

Linux网络编程系列之网络编程基础

Linux网络编程系列 (够吃,管饱) 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

如何降低海康、大华等网络摄像头调用的高延迟问题(二)

目录 1.RTSP介绍 2.解决办法1 3.解决办法2 1.RTSP介绍 RTSP(Real-time Streaming Protocol)是一种用于实时流媒体传输的网络协议。它被设计用于在服务器和客户端之间传输音频、视频以及其他流媒体数据。 RTSP协议允许客户端通过与服务器建立RTSP会话…

Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析

引言 在使用 Easysearch 时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd source_reuse,我们最近重新优化了 source_reuse,使得它在吞吐量…