MongoDB学习笔记(四)--索引 && 性能优化
索引
- 基础索引
用到ensureIndex方法建立索引,1为升序,-1为降序。
MongoDB数据库在创建集合的时候,默认会为_id创建索引。
注:当系统已有大量数据时,创建索引就是一个非常耗时的工作,只需要指定backgroud:true即可。
db.yyd.ensureIndex({"name":1},{"backgroud:true"})
- 文档索引
注:下面的查询将不会用到索引,因为查询的顺序与索引建立的顺序不一样。
db.yyd.find({"address":{"short":"CD","city":"chengdu"}})
- 组合索引
此时,无论city和short的顺序是前是后,都会用到索引。
- 删除索引
为了后面方便查看,先把刚才建立的索引删除掉。
- 唯一索引
这里的唯一索引就像非NoSQL数据库里面的主键一样。如果集合中有重复的值,系统会报错。
- 强制使用索引
先向里面插入数据,使name和age为索引,当查询的时候用explain()方法来查看查询所用到的索引indexBounds参数。由上图看出,没用到索引。
现在通过hint命令强制使用索引。
- 索引名称
索引的名称是默认取好了的,一般是“索引_1”这样的,当然也可以自己设置索引的名字。
db.yyd.ensureIndex({"name":1},{"name":"index_name"})
- 优化器profiler
profiler相当于MySQL中的慢查询日志,但是比慢查询日志更详细。
使用profiler优化器就必须先开启它,在mongoDB中有两种方法控制profiler的开关和级别。
-
方法一:
在启动服务的时候加上 –profiler 参数,通过这个参数来设置profiler的级别。
方法二:
db.setProfilingLevel(level,slowms)
在客户端调用setProfilingLevel()方法。
level为级别,0代表不开启,1代表记录慢命令(默认100ms),3代表记录所有命令。
slowms代表慢命令执行的时间,超过这个时间将写入日志中。
查询profiler日志
db.system.profile.find() show profile
性能优化
- 创建索引
- 限定返回结果数
- 只查询使用到的字段,而不查询所以字段
- 采用capped集合
- 采用Server Side Code Execution
- hint
- 采用profiling
- mongosniff底层监控
mongosniff --source NET lo
- mongostat查看运行中的实例统计信息
mongostat
- db.serverStatus查看实例运行状态
>db.serverStatus()
- db.stats查看数据库状态
>db.stats()
《MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁》 传送门 http://www.cnblogs.com/yydcdut/p/3558446.html
《MongoDB学习笔记(五)--复制集 && sharding分片》 传送门 http://www.cnblogs.com/yydcdut/p/3564470.html
出处:http://yydcdut.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?