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,表示查询进行了全表扫描,建议创建合适的索引。

相关推荐
许彰午6 小时前
14_Java泛型完全指南
java·windows·python
lengxuemo6 小时前
ICC2学习笔记之Placement and Optimization
笔记·学习
温柔只给梦中人7 小时前
NLP学习:注意力机制
人工智能·学习·自然语言处理
智慧物业老杨7 小时前
司法绿色通道下的物业纠纷数智化解决方案——基于“三优先“机制的全流程技术落地实践
java·django
2601_961194027 小时前
2026初级会计实务公式总结大全|计算题公式手册PDF
java·spring·eclipse·pdf·tomcat·hibernate
做个文艺程序员7 小时前
第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
java·云原生·容器·kubernetes·容器编排
逐影者3978 小时前
ch592f学习
学习
小满Autumn8 小时前
MVVM Light 架构笔记:定位器、命令、消息与 IoC 实践
笔记·学习·架构·c#·上位机·mvvm
蓝黑墨水8 小时前
动画角色的整个流程
学习
小欣加油9 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode