济源市网站建设_网站建设公司_Sketch_seo优化
2025/12/17 23:20:30 网站建设 项目流程

文章目录

  • 第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}`);})

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询