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

相关推荐
benbenAItalk8 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl8 小时前
Java学习二 基本语法2, 算术运算符
java·学习
niucloud-admin9 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885729 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户9 小时前
Java锁
java·开发语言
shehuiyuelaiyuehao11 小时前
1计算机是如何工作的
java·计算机网络
衡石科技11 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
letisgo511 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周11 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三84412 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker