news 2026/2/14 18:59:24

【MongoDB实战】6.2 常用索引类型实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MongoDB实战】6.2 常用索引类型实战

文章目录

  • 第6章 性能优化:索引与查询效率提升
    • 6.2 常用索引类型实战
      • 6.2.0 前置准备:构建统一测试数据集
      • 6.2.1 单字段索引:基础高频索引类型
        • 核心概念
        • 实战实操
          • 步骤1:创建单字段索引
          • 步骤2:查看集合所有索引
          • 步骤3:验证单字段索引的查询效率
          • 步骤4:删除单字段索引
      • 6.2.2 复合索引:多字段组合查询优化
        • 核心概念
        • 实战实操
          • 步骤1:创建复合索引
          • 步骤2:验证复合索引的使用场景
          • 步骤3:复合索引的“前缀匹配”规则(关键避坑)
      • 6.2.3 唯一索引:解决重复数据问题
        • 核心概念
        • 实战实操
          • 步骤1:创建单字段唯一索引
          • 步骤2:创建复合唯一索引(多字段组合唯一)
          • 步骤3:处理已有重复数据的唯一索引创建
      • 6.2.4 数组索引:针对数组字段的索引优化
        • 核心概念
        • 实战实操
          • 步骤1:创建数组索引
          • 步骤2:验证数组索引的查询效率
          • 步骤3:数组索引的边界场景(避坑)
      • 6.2.5 索引管理与核心避坑总结
        • 1. 索引管理常用命令
        • 2. 核心避坑规则

第6章 性能优化:索引与查询效率提升

6.2 常用索引类型实战

MongoDB提供多种索引类型适配不同查询场景,核心是“按需创建索引”——既利用索引加速查询,又避免过度索引增加写入开销。

  • 本节通过可落地的实战代码,详解单字段、复合、唯一、数组索引的创建、使用与验证

6.2.0 前置准备:构建统一测试数据集

为保证所有索引测试的一致性,先创建包含“单字段、多字段、数组字段”的用户行为集合,插入10万条测试数据:

// 1. 切换数据库use performance_db;// 2. 清空历史集合(避免干扰)db.user_behavior.drop();// 3. 生成测试数据(包含数组字段tags/hobbies)let behaviorData=[];// 预设标签/爱好池(用于生成数组字段)consttagPool=["购物","游戏","学习","运动","美食","旅行","音乐","影视"];consthobbyPool=["跑步","游泳","看书","编程","做饭","摄影","钓鱼"];for(let i=0;i<100000;i++){// 随机生成数组字段:tags(2-4个标签)、hobbies(1-3个爱好)constrandomTags=tagPool.sort(()=>0.5-Math.random()).slice(0,Math.floor(Math.random()*3)+2);constrandomHobbies=hobbyPool.sort(()=>0.5-Math.random()).slice(0,Math.floor(Math.random()*3)+1);behaviorData.push({user_id:`U${String(i).padStart(6, '0')}`,// 用户ID(U000000~U099999)age:Math.floor(Math.random()*40)+20,// 年龄20-60岁city:["北京","上海","广州","深圳","杭州","成都"][Math.floor(Math.random()*6)],// 城市register_ts:newDate(Date.now()-Math.floor(Math.random()*365*24*3600*1000)),// 注册时间(近1年)tags:randomTags,// 兴趣标签(数组)hobbies:randomHobbies,// 爱好(数组)login_count:Math.floor(Math.random()*1000)+10// 登录次数(10-1009次)});}// 批量插入数据(效率优于单条插入)db.user_behavior.insertMany(behaviorData);print(`测试数据集创建完成,文档总数:${db.user_behavior.countDocuments()}`);

6.2.1 单字段索引:基础高频索引类型

核心概念

单字段索引是针对单个字段创建的索引(升序/降序),适用于“仅基于单个字段过滤/排序”的高频查询场景(如按年龄、城市、用户ID查询),是最基础、使用最广泛的索引类型

实战实操
步骤1:创建单字段索引
// 为age字段创建升序索引(1=升序,-1=降序,效果等价,仅影响排序方向)db.user_behavior.createIndex({age:1});// 为city字段创建降序索引(自定义索引名称,便于管理)db.user_behavior.createIndex({city:-1},{name:"idx_city_desc"});
步骤2:查看集合所有索引
// 查看索引列表(包含默认的_id_索引)constindexes=db.user_behavior.getIndexes();print("当前集合索引列表:");indexes.forEach((idx,i)=>{print(`${i+1}. 索引名称:${idx.name} | 索引字段:${JSON.stringify(idx.key)} | 是否唯一:${idx.unique || false}`);})
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/14 10:27:14

【MongoDB实战】6.3 索引优化实战:慢查询解决

文章目录 《MongoDB实战入门》第6章 性能优化:索引与查询效率提升 6.3 索引优化实战:慢查询解决 6.3.1 识别慢查询:explain()方法分析查询执行计划 1. 核心概念铺垫 2. 实操:识别慢查询(准备测试数据+分析执行计划) 6.3.2 优化案例:为慢查询添加合适索引(对比优化前后)…

作者头像 李华
网站建设 2026/2/12 9:21:56

HTML如何设计JQuery支持大文件上传的拖拽功能?

2023年11月2日 星期四 阴有小雨 外包项目日志 - 企业级大文件传输系统Day3 项目背景与架构设计 客户是某地质勘探研究院&#xff0c;每日需上传**20GB**的勘探数据&#xff08;含激光扫描点云、地质剖面图等&#xff09;&#xff0c;要求&#xff1a; 文件夹结构保留&#xf…

作者头像 李华
网站建设 2026/2/11 23:58:48

yolo-ORBSLAM2复现

这个也是一个经典的问题了&#xff0c;我是想复现&#xff0c;再进行修改&#xff0c;因为我不使用yolo作为检测&#xff0c;但要先搞清楚检测框是怎么送入slam的&#xff0c;所以先复现各位大佬们的。主要参考&#xff1a; https://github.com/JinYoung6/orbslam_addsemantic…

作者头像 李华
网站建设 2026/2/12 15:41:57

python基于大数据技术的购房推荐系统的设计与实现

Python基于大数据技术的购房推荐系统的设计与实现是一个复杂但具有广泛应用前景的项目。以下是对该系统的详细介绍&#xff1a; 一、系统概述 购房推荐系统利用Python编程语言的强大功能和丰富的大数据技术&#xff0c;结合机器学习算法和推荐算法&#xff0c;对购房数据进行深…

作者头像 李华
网站建设 2026/2/6 20:25:17

介观交通流仿真软件:DynusT_(20).DynusT在实际项目中的应用

DynusT在实际项目中的应用 在上一节中&#xff0c;我们已经了解了DynusT的基本功能和使用方法。本节将详细介绍如何在实际项目中应用DynusT进行交通流仿真。我们将通过具体的案例来展示如何设置仿真参数、导入交通网络数据、模拟交通流量以及分析仿真结果。这些案例将涵盖城市交…

作者头像 李华
网站建设 2026/2/6 18:15:51

深入JVM(三):JVM执行引擎

JVM执行引擎 一、JVM前后端编译 前端编译&#xff1a;使用编译器将Java文件编译成class字节码文件后端编译&#xff1a;将class字节码文件编译成机器码指令java 跨平台直接理解&#xff1a;前端编译将java文件编译成class文件&#xff0c; 然后使用jvm&#xff08;后端编译&…

作者头像 李华