Mongodb性能优化方法

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第82篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

Mongodb与其他数据库类似,当面临大量数据查询时,会出现各种各样的性能问题。本文结合Mongodb的官方文档,整理几个优化Mongodb查询的技巧。

为查询添加索引

为常用的查询建立索引。为多字段查询建立复合索引。当Mongodb执行查询语句时,通过索引查询会比全表扫描快很多。通常,索引的结构也会比文档引用小,而且按照顺序存储。

如有集合posts,用来存储博客发帖信息。如果客户端或应用程序经常按照字段author_name查询,那么可以在author_name字段添加索引来对这个查询进行优化。

复制代码
db.posts.createIndex({author_name: 1})

索引也能够提高在指定字段的排序效率。如系统中的一个经常执行的查询需要按照timestamp字段排序,那么可以通过在字段timestamp添加索引来进行优化。

复制代码
db.posts.createIndex({timestamp:1})

添加索引后,类似下面的查询会优化

复制代码
db.posts.find().sort({timestamp: -1})

Mongodb支持索引的正向和逆向读取。单字段索引的读取顺序对性能没有影响。

索引能够提高查询,数据更新和一些聚合操作的效率。

限制返回数据量,减少网络开销

Mongodb的游标按照分组的形式返回查询结果。如果用户清楚的知道要返回的数据量,用户可以通过添加limit()方法,来限制返回数据的数量,减少网络开销。通查用户的查询和排序一起执行。如下面的操作,用户只返回了posts集合中最新的10条数据。

复制代码
db.posts.find().sort({timestamp: -1}).limit(10)

仅返回需要的数据

当用户仅需要文档中的部分字段时,通过限制只返回需要的字段能够带来好的性能。如在posts集合中,用户只需要timestamp, title, author和abstract字段,用户可以这样构建查询语句。

复制代码
db.posts.find({}, {timestamp:1, title:1, author: 1, abstract:1}).sort({timestamp: -1})

使用$hint指定索引查询

大多数情况下,查询优化器能够为指定操作选择合适的索引。但用户可以通过$hint方法,指定Mongodb查询时使用的索引。hint()方法支持性能调试,也能够在查询语句中从多个索引中手动选择一个最优的索引。

使用Mongodb提供的计算操作符,减少操作次数

如使用Mongodb的$inc方法,对字段值增加或减少。这个操作直接发生在Mongodb的进程当中,而不是查询出来,在客户端计算完新的字段,在保存回mongodb。使用这样的操作符,将查询,数据计算和保存的动作合并成一个动作,也减少了不同客户端操作时产生的并发问题。

相关推荐
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·课程设计
哈__3 小时前
KES-Operator重塑Kubernetes环境下的KES数据库集群管理
数据库·kubernetes·operator·kes
IvorySQL4 小时前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
CNSSIRD数据库5 小时前
中国企业环境信用数据库2003-2026
大数据·数据库·数据分析·论文笔记
fd32006 小时前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
华章酱6 小时前
MySQL幻读是怎么出现的
数据库·mysql·幻读
浅念-6 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
updayday8547 小时前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
Nturmoils7 小时前
只恢复一张表,别把整个库都还回去
数据库
龙腾AI白云7 小时前
大语言模型:从语言理解到通用智能的跃迁
数据库·人工智能·机器学习·知识图谱