JAVA Mongodb 深入学习(二)索引的创建和优化

一、常用索引类型

1、单个索引

单个索引的创建

复制代码
db.你的表名.createIndex({"你的字段名":1})

单个索引的创建且是唯一索引

复制代码
db.你的表名.createIndex({"你的字段名":1}),{ unique: true })
2、复合索引

将多个过滤的字段,做成索引,如果有排序字段,也需要加进去。(尽量别使用主键ID作为排序字段)。

索引字段覆盖,如果只需要返回少量的两三个字段,可以将过滤字段和返回字段都做成索引,查询会非常快,不会去访问实际的文档数据,而是从索引数据,获取内容。

复制代码
db.你的表名.createIndex({"你的字段名1":1,"你的字段名2":1})

二、性能分析

复制代码
db.getCollection('你的表名').find({'你的字段名':"过滤的内容"}).explain("executionStats");
复制代码
如果 winningPlan 中的 stage 是 COLLSCAN,表示查询进行了全表扫描

返回的参数内容
  • queryPlanner

    • plannerVersion: 查询规划器的版本号。
    • namespace: 查询所针对的命名空间(数据库和集合)。
    • indexFilterSet: 指示是否设置了索引过滤。
    • parsedQuery: 查询条件的解析表示。
    • winningPlan: 最终被选择的执行计划。
    • rejectedPlans: 被拒绝的备选执行计划列表。
  • executionStats

    • executionSuccess: 表示查询是否成功执行。
    • nReturned: 返回的文档数量。
    • executionTimeMillis: 查询执行的总时间(毫秒)。
    • totalKeysExamined: 查询过程中检查的索引键数量。
    • totalDocsExamined: 查询过程中扫描的文档数量。
    • executionStages: 描述执行计划的各个阶段及其性能统计信息。
  • serverInfo

    • host: 执行查询的服务器主机名。
    • port: 执行查询的服务器端口号。
    • version: MongoDB 服务器的版本。
    • gitVersion: 服务器的 Git 版本。

三、优化建议

1、定期清理不必要的索引和数据

2、如果查询只需要特定字段,可以创建覆盖索引,减少文档扫描次数

3、避免全表扫描,如果 winningPlan 中的 stage 是 COLLSCAN,表示查询进行了全表扫描,建议创建合适的索引。

相关推荐
kdxiaojie3 分钟前
Linux 驱动研究 —— SDIO (1)
linux·运维·笔记·学习·sdio
豆沙沙包?25 分钟前
C++-程序的内存模型(P84-P88)
java·jvm·c++
吴声子夜歌43 分钟前
正则指引——匹配原理
java·正则表达式
未秃头的程序猿1 小时前
凌晨3点被叫醒:线上OOM,我用这套流程40分钟定位根因
java·jvm·后端
letisgo52 小时前
JDK21 + Spring AI 2.0 入场指南:2026 年 Java 开发者 AI 架构全景图
java·ai·idea·jdk21
白仑色2 小时前
Spring Boot 从切面统一控制事务
java·spring boot·aop·spring事务
Flynt2 小时前
Java并行流,让我debug了一整天
java
DFT计算杂谈2 小时前
FeSe超薄膜在CaF2衬底上的电子结构DFT研究
java·服务器·前端
circuitsosk2 小时前
长文本与高并发下的Token“瘦身”策略:Prompt压缩与上下文窗口优化
java·前端·python·prompt·上下文窗口·token优化
岁岁养乐多2 小时前
LangChain4j 工厂模式
java·开发语言