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

相关推荐
帅得不敢出门5 分钟前
精简Android SDK(AOSP)的git项目提高git指令速度
android·java·开发语言·git·elasticsearch
青蛙大侠公主7 分钟前
Spring事务
java·数据库·spring
小小Fred8 分钟前
FreeRTOS函数prvInitialiseNewTask解析
java·开发语言
图表制作解说(目标1000个图表)10 分钟前
Java通过BACnet协议读取和写入设备信息
java·楼宇自控·bacnet协议
老华带你飞12 分钟前
校务管理|基于springboot 校务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
利刃大大15 分钟前
【JavaSE】十一、Stack && Queue && Deque && PriorityQueue && Map && Set
java·数据结构·优先级队列··哈希表·队列·集合类
油丶酸萝卜别吃16 分钟前
springboot项目中与接口文档有关的注解
java·spring boot·后端
小码哥06819 分钟前
家政服务管理-家政服务管理平台-家政服务管理平台源码-家政服务管理平台java代码-基于springboot的家政服务管理平台
java·开发语言·spring boot·家政服务·家政服务平台·家政服务系统·家政服务管理平台源码
炽烈小老头19 分钟前
【 每天学习一点算法 2025/12/12】回文链表
学习·算法·链表
Java爱好狂.25 分钟前
复杂知识简单学!Springboot加载配置文件源码分析
java·spring boot·后端·spring·java面试·后端开发·java程序员