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 小时前
FPGA学习笔记——IIC协议简介
笔记·学习·fpga开发
lingggggaaaa6 小时前
小迪安全v2023学习笔记(六十二讲)—— PHP框架反序列化
笔记·学习·安全·web安全·网络安全·php·反序列化
呼啦啦啦啦啦啦啦啦7 小时前
常见的排序算法
java·算法·排序算法
我们从未走散7 小时前
JVM学习笔记-----StringTable
jvm·笔记·学习
anlogic7 小时前
Java基础 8.18
java·开发语言
胡萝卜3.08 小时前
数据结构初阶:排序算法(一)插入排序、选择排序
数据结构·笔记·学习·算法·排序算法·学习方法
练习时长一年8 小时前
AopAutoConfiguration源码阅读
java·spring boot·intellij-idea
xinzheng新政9 小时前
纸板制造制胶工艺学习记录4
学习·制造
源码宝9 小时前
【智慧工地源码】智慧工地云平台系统,涵盖安全、质量、环境、人员和设备五大管理模块,实现实时监控、智能预警和数据分析。
java·大数据·spring cloud·数据分析·源码·智慧工地·云平台
David爱编程10 小时前
面试必问!线程生命周期与状态转换详解
java·后端