news 2026/6/10 17:44:00

【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/6/10 18:01:32

jQuery Mobile 主题

jQuery Mobile 主题 引言 jQuery Mobile 是一个流行的前端框架,用于创建响应式网站和应用程序。其核心特点之一就是主题,主题使得开发者能够快速定制界面风格,以适应不同的品牌和用户需求。本文将深入探讨 jQuery Mobile 主题的概念、类型、定制方法以及最佳实践。 jQuer…

作者头像 李华
网站建设 2026/6/10 18:01:39

ZingChart使用动画过渡效果使图表更清晰

使用动画过渡效果使图表更清晰 2025年12月15日Web Components 图表具有流畅的动画效果&#xff0c;使数据变化更容易查看&#xff0c;并帮助用户保持专注&#xff0c;即使是复杂的视觉效果。ZingChart Web Components 图表控件中的动画是指在数据渲染、更新或交互过程中应用于图…

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

AppML 案例模板

AppML 案例模板 引言 AppML,作为一款强大的移动应用开发工具,以其高效、便捷的特点受到了广大开发者的青睐。为了帮助开发者更好地理解和运用AppML,本文将提供一个案例模板,旨在指导开发者如何利用AppML创建出优秀的移动应用。 案例背景 随着移动互联网的快速发展,移动…

作者头像 李华
网站建设 2026/6/10 18:02:20

JavaScript如何利用JQuery实现100G文件HTTP断点续传?

大文件传输解决方案建议书 一、需求分析与技术挑战 作为福建IT行业软件公司项目负责人&#xff0c;针对贵司提出的大文件传输需求&#xff0c;我进行了全面分析&#xff0c;发现以下几个核心挑战&#xff1a; 超大文件传输稳定性&#xff1a;单文件100G的传输及断点续传文件…

作者头像 李华
网站建设 2026/6/10 18:02:23

JS如何利用切片技术实现超大附件的秒传与续传?

前端老哥的奇幻漂流&#xff1a;20G文件上传历险记 大家好&#xff0c;我是那个"预算100元想造航天飞机"的陕西前端老哥。最近接了个外包&#xff0c;客户要求用原生JS实现20G文件上传&#xff0c;还要兼容IE9…我差点没把手中的肉夹馍吓掉&#xff01; 需求分析&a…

作者头像 李华
网站建设 2026/6/10 16:31:24

WebUploader如何配合Vue2实现百万文件上传的批量处理?

前端老哥的外包求生记&#xff1a;20G大文件上传系统&#xff08;Vue3原生JS&#xff09; 兄弟们&#xff01;我是福建一名“头发渐少但代码不秃”的前端程序员&#xff0c;最近接了个外包活——给客户做文件管理系统&#xff0c;核心需求就一个&#xff1a;“20G大文件文件夹…

作者头像 李华