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:
- 查询的阶段(Stage): winningPlan中的stage字段描述了MongoDB执行查询的主要阶段。常见的阶段包括COLLSCAN(集合扫描)、IXSCAN(索引扫描)、FETCH(从索引中获取文档)等。了解查询的主要阶段有助于确定查询性能的瓶颈。
- 索引使用: 如果winningPlan中的阶段是IXSCAN,表示MongoDB正在使用一个或多个索引来执行查询。你可以查看winningPlan中的inputStage字段,以了解使用的具体索引。优化索引的选择和使用可以显著提高查询性能。
- 筛选条件: winningPlan中的filter字段描述了用于筛选文档的条件。这可以帮助你确定MongoDB是否有效地使用索引来减少文档扫描的数量。
- 索引覆盖: 如果winningPlan中的阶段是FETCH,表示MongoDB在索引扫描后需要额外的步骤来获取文档。优化查询性能的一种方式是尽量让索引覆盖查询,即索引本身包含了查询所需的字段,而无需额外获取文档。
- 文档数量: winningPlan中通常包括有关查询返回的文档数量的信息,如nReturned。这对于评估查询的效率和性能至关重要。
- 排序和限制: 如果查询中包括排序和限制条件,winningPlan中也会包含这些信息。排序和限制条件可能会影响查询性能,特别是如果没有适当的索引支持。
- 索引覆盖: 查询计划中的 indexOnly 指示是否使用了索引覆盖,即查询结果是否可以完全从索引中获取,而无需额外的文档检索。索引覆盖可以显著提高查询性能。
- 其他信息: winningPlan中可能还包含其他信息,例如direction字段用于表示索引扫描的方向(正向或反向),以及其他执行计划相关的信息。
综合分析上述信息,你可以确定查询性能的瓶颈,并采取相应的优化措施,例如创建合适的索引、调整查询条件、减少文档扫描等,以提高查询的效率和性能。请注意,分析查询计划可能需要一定的经验,特别是在复杂的查询场景中,但它是优化MongoDB查询性能的关键步骤。
2. 查看mongoDB 集合的索引
use your_database
db.myCollection.getIndexes()
示例:

- key: 这部分指示了索引的字段和排序方式。在你的示例中,“_id”: 1 表示这个索引是基于 _id 字段创建的,而 1 表示按升序排序。MongoDB默认为每个集合创建一个唯一索引,用于快速查找文档。
- name: 这是索引的名称。在你的示例中,索引名称是 “id”,这是默认的命名规则,通常是字段名加下划线。
- ns: 这是索引所属的命名空间。在你的示例中,索引属于 “scfop-api-partner” 数据库中的 “dataSyncRequestVO” 集合。
- 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、 gt、lt)和排序操作中。
在MongoDB中,如果你创建一个索引而没有明确指定排序方式,MongoDB将默认使用升序索引。
例如,以下命令将创建一个基于字段 fieldName 的升序索引:
db.collection.createIndex({ fieldName: 1 });
降序索引(Descending Index):
降序索引与升序索引相反,它按照从大到小(Z到A、9到0)的顺序排序索引键的值。降序索引在某些查询场景中也可以提供性能优势,尤其是在需要按照字段降序排序的查询操作中。
你可以通过将字段的排序方式设置为 -1 来创建一个降序索引。例如:
db.collection.createIndex({ fieldName: -1 });
这将创建一个基于 fieldName 字段的降序索引。
需要注意的是,使用降序索引可能会增加索引的维护成本,因为MongoDB需要额外的空间和计算来维护降序索引。因此,在选择索引排序方式时,需要根据实际的查询需求和性能测试结果来决定。
相关文章:
mongoDB 性能优化
文章目录 前言mongoDB 性能优化1. explain方法来查看查询的执行计划2. 查看mongoDB 集合的索引3. mongoDB 怎么添加索引4. 升序索引与降序索引是什么意思 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易…...
10月13日,每日信息差
今天是2023年10月13日,以下是为您准备的13条信息差 第一、欧盟投资4.5亿欧元在法国建设电池超级工厂。欧洲投资银行是欧盟的贷款机构,也是世界上最大的跨国银行之一 第二、北京银行推出数字人民币智能合约平台 数字人民币预付资金管理产品在商超场景…...
Spring Boot 中的 Redis 数据操作配置和使用
Spring Boot 中的 Redis 数据操作配置和使用 Redis(Remote Dictionary Server)是一种高性能的开源内存数据库,用于缓存、消息队列、会话管理和数据存储。在Spring Boot应用程序中,Redis被广泛用于各种用例,包括缓存、…...
rust宏
宏看起来和函数很像,只不过名称末尾有一个感叹号 ! 。 宏并不产生函数调用,而是展开成源码,并和程序的其余部分一起被编译。 Rust宏和C不同,Rust的宏会展开为抽象语法树(AST,abstract syntax treeÿ…...
性能测试之性能测试指标详解
前言 刚开始,以为做性能测试,就是做些脚本、参数化、关联,压起来之后,再扔出一个结果。 但实际上不止这些内容,还要加上性能分析,关注调优之后响应时间有多大的提升,TPS 有多大的提高…...
CustomNavBar 自定义导航栏视图
1. 创建偏好设置键 CustomNavBarTitlePreferenceKey.swift import Foundation import SwiftUI//State private var showBackButton: Bool true //State private var title: String "Title" //"" //State private var subtitle: String? "SubTitl…...
canal rocketmq
上篇文章canal 消费进度说到直接使用ClusterCanalConnector并发消费是有问题的,可以先用单点将canal事件发送到mq中,再由mq并发处理,另外mq还可以做到削峰的作用,让canal数据不至于阻塞。 使用队列,可以自己起一个单实…...
【数据库系统概论】第九章关系查询处理何查询优化
9.1查询处理 一:查询处理步骤 关系数据库管理系统查询处理可以分为4个阶段: 查询分析查询检查查询优化查询执行 (1)查询分析 任务:对查询语句进行扫描,分析词法、语法是否符合SQL语法规则 如果没有语…...
bp盐丘模型波场数值模拟matlab
波场数值模拟是地震勘探和地震学研究中常用的工具,而BP(Backpropagation)盐丘模型是一种用于地下介质成像的方法。如果您想在MATLAB中进行波场数值模拟,并结合BP盐丘模型进行地下成像,可以按照以下步骤进行:…...
结构体对齐规则
1.第一个成员在结构体变量偏移量为0的地址处。 2.其他成员变量对齐到某个数字(对齐数)的整数倍的地址处。(对齐数编译器默认的一个对齐数与该成员大小的较小值)注意:目前有且只有VS编译器有默认为8. 3.结构体总大小为最大对齐数的整数倍。 4.如果嵌套…...
css 如何让元素内部文本和外部文本 一块显示省略号
实际上还是有这样的需求的 <div class"container"><span>啊啊啊啊啊啊啊啊</span>你好啊撒撒啊撒撒撒撒啊撒撒撒撒撒说</div>还是有这样的需求的哦。 div.container {width: 200px;white-space: nowrap;text-overflow: ellipsis;overflow:…...
SQL语句-中级
一、Mysql软件使用 1.启动/停止Mysql服务器 任务管理器 cmd命令:以管理员的身份打开cmd命令行 net start mysql80//开启net stop mysql80//停止 2.连接与断开Mysql服务器 注意要在bin目录下执行:-u用户名root,-p密码 mysql -u root -p 可能出现的…...
巧用h2-database.jar连接数据库
文章目录 一 、概述二、实践三、解决办法 一 、概述 H2 Database是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2 Database提供了一个十分方便的web控制台用于操作和管理数据库内容。H2 Database还提供兼容模式&#…...
136.只出现一次的数字
136. 只出现一次的数字 - 力扣(LeetCode) 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且…...
mysql中遇到查询字段的别名与函数冲突问题
比如以下哎,我查询城市行业数量排名 select City, DENSE_RANK() over(ORDER BY COUNT(Id) DESC) rank, COUNT(Id) num,IndustrySubGroupName from base_companyinfo WHERE IndustrySubGroupName工业机器人 GROUP BY City 上面使用 DENSE_RANK() 函数来计算排名&am…...
直播获奖
题目描述 NOI2130 即将举行。为了增加观赏性, CCF 决定逐一评出每个选手的成 绩,并直播即时的获奖分数线。本次竞赛的获奖率为 𝑤% ,即当前排名前 𝑤% 的选手的最低成绩就是即时的分数线。 更具体地,…...
选择适合自身业务的HTTP代理有哪些因素决定?
相信对很多爬虫工作者和数据采集的企业来说,如何选购适合自己业务的HTTP代理是一个特别特别困扰的选题,市面上那么多HTTP代理厂商,好像这家有这些缺点,转头又看到另外一家的缺点,要找一家心仪的仿佛大海捞针。今天我们…...
1.3 do...while实现1+...100 for实现1+...100
思路:两个变量,一个变量存储数据之和,一个变量实现自增就行 do...while int i, s;i 1;s 0;do{s 1;i;} while (i < 100);cout << s << endl; for int i, j0;for (i 1; i < 100; i){j 1;}cout << j << …...
react数据管理之setState与Props
react数据管理之setState与Props setState调用原理 setState 是 React 中用于更新组件状态(state)的方法。它的调用原理可以分为以下几个步骤: 状态的改变:当调用 setState 时,React 会将新的状态对象与当前状态对象…...
如何保护我们的网络安全
保护网络安全是至关重要的,尤其是在今天的数字化时代。以下是一些保护网络安全的基本步骤: 1、使用强密码:使用包含字母、数字和特殊字符的复杂密码。不要在多个网站上重复使用相同的密码。定期更改密码。 2、启用双因素认证 (2FA)ÿ…...
OpenClaw远程控制方案:通过nanobot实现安全外网访问
OpenClaw远程控制方案:通过nanobot实现安全外网访问 1. 为什么需要远程控制OpenClaw? 上周我需要出差三天,但电脑上运行的OpenClaw自动化任务突然报错。当时我面临两个选择:要么让任务中断三天,要么冒险把本地网关直…...
Pixel Fashion Atelier实战教程:如何导出带元数据的PNG并适配Unity像素精灵管线
Pixel Fashion Atelier实战教程:如何导出带元数据的PNG并适配Unity像素精灵管线 1. 教程概述 Pixel Fashion Atelier作为一款专为像素艺术设计的AI生成工具,其输出结果需要经过特殊处理才能完美适配Unity的像素精灵管线。本教程将手把手教你如何导出带…...
建行江门市分行:量身定制金融策 陈皮产业绽新姿
“前期承包土地、购买柑苗已投入大量资金,后续还要设法购买化肥。”眼看资金接续不上,前期投入面临打水漂,流动资金短缺让江门新会某陈皮庄园负责人老李一筹莫展。 获悉老李困境后,建行广东江门分行网点客户经理驱车前往果园实地走…...
5分钟搭建专业级缠论可视化分析平台:从零到实战的完整指南
5分钟搭建专业级缠论可视化分析平台:从零到实战的完整指南 【免费下载链接】chanvis 基于TradingView本地SDK的可视化前后端代码,适用于缠论量化研究,和其他的基于几何交易的量化研究。 缠论量化 摩尔缠论 缠论可视化 TradingView TV-SDK 项…...
3步打造你的专属阅读系统:开源工具如何重构数字阅读体验
3步打造你的专属阅读系统:开源工具如何重构数字阅读体验 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 你是否曾遇到这样的困扰:阅读APP充斥广告弹窗、书源受限无法找到心仪内…...
FRCRN模型结构解析:频域卷积+循环网络如何协同提升信噪比
FRCRN模型结构解析:频域卷积循环网络如何协同提升信噪比 1. 引言:语音降噪的挑战与突破 语音降噪技术一直面临着"既要又要"的难题:既要彻底消除背景噪声,又要完整保留人声细节。传统的降噪方法往往在这两者之间难以平…...
如何用kill-doc解决30+文档平台下载难题:免费高效的文档获取方案
如何用kill-doc解决30文档平台下载难题:免费高效的文档获取方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本…...
SDMatte惊艳抠图效果展示:10组高难度玻璃/纱布/叶片实测对比图
SDMatte惊艳抠图效果展示:10组高难度玻璃/纱布/叶片实测对比图 1. 开篇:当AI遇见高难度抠图 在图像处理领域,抠图一直是个技术活。特别是遇到玻璃杯、薄纱窗帘、树叶这些半透明或边缘复杂的物体时,传统工具往往力不从心。今天我…...
清华学位论文高效排版:thuthesis一站式规范生成解决方案
清华学位论文高效排版:thuthesis一站式规范生成解决方案 【免费下载链接】thuthesis LaTeX Thesis Template for Tsinghua University 项目地址: https://gitcode.com/gh_mirrors/th/thuthesis 🎯 价值定位:为什么选择thuthesis模板&a…...
极简OpenClaw技能开发:给Qwen3-32B-Chat扩展Excel处理能力
极简OpenClaw技能开发:给Qwen3-32B-Chat扩展Excel处理能力 1. 为什么需要自定义Excel处理技能 去年我接手了一个数据分析项目,每天需要处理几十份Excel报表。手动操作不仅耗时,还容易出错。当我尝试用OpenClaw自动化这个流程时,…...
