当前位置: 首页 > news >正文

【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}`);})
http://www.jsqmd.com/news/106775/

相关文章:

  • 大厂Java面试故事:微服务、缓存、消息队列与AI场景全链路技术拆解
  • 【HarmonyOS NEXT】ohpm 安装依赖失败(@finclip 包找不到)问题复盘与解决方案
  • 深度优先遍历与连通分量
  • Xiaomi MiMo-V2-Flash 开源:高效推理、代码与 Agent 基座模型
  • 【基于模型的强化学习】#1 引论:Dyna架构
  • 【MongoDB实战】6.3 索引优化实战:慢查询解决
  • SciPy 安装指南
  • 避开 35 岁职场危机:网络安全为何能成为越沉淀越吃香的赛道?
  • 使用命令行工具 ogr2ogr 将 CSV 转换为 Shp 数据(二)
  • Git
  • 9个AI论文工具,自考本科轻松搞定!
  • Xhorse XDMPR8GL Adapter: Program MQB-RH850/V850 ECUs with Xhorse Multi Prog
  • CTF 比赛值得参加吗?计算机专业参赛必要性分析,附门槛要求与获奖好处!
  • Java常见技术分享-09-模版方法模式
  • FreeModbus+STM32F407IGT6标准库项目代码
  • 蓝桥杯 嵌入式 客观题 [1000道]第二期 持续更新中
  • 拥抱AI,HPE Networking以“自动驾驶的网络”引领智能网络新时代
  • 2025 IT 行业就业全景:26 届及以后考生,计算机专业仍值得报考吗?
  • MongoDB Java
  • SQL必会必知整理-11-分组数据
  • AngularJS 表单
  • 2025 最新版 Kali Linux 教程:零基础小白入门到精通,工具使用全攻略一篇搞定!
  • 10个SolidWorks研发设计共享一台工作站——昆山精密机械工厂降本增效一举三得
  • 单页应用 (SPA):为什么现在的网页这么快?
  • JavaScript Window Location
  • React Native中实现鸿蒙跨平台开发使用状态管理库如`Redux`或`MobX`来管理应用状态,尤其是在处理多个组件共享状态时,使用`AsyncStorage`来存储用户数据和配置
  • SVG 多边形
  • 超适合CSDN站和B站的英语环境生成器。颠覆传统:忘掉“学”英语,开始“接触”英语!
  • 8个AI论文工具,专科生轻松搞定毕业写作!
  • 动态规划算法<1>为什么动态规划总让你头疼?看完这篇彻底入门