第4章:MongoDB索引

news/2025/1/9 12:25:43/

第4章:MongoDB索引

4.1 索引基础

4.1.1 索引的重要性

  • 提高查询性能
  • 减少集合扫描
  • 支持高效排序

4.1.2 默认索引

// _id字段的默认索引
{"_id": ObjectId("..."),"name": "示例文档"
}

4.2 索引类型

4.2.1 单字段索引

// 创建单字段索引
db.users.createIndex({username: 1})  // 升序
db.users.createIndex({username: -1}) // 降序// 查看集合索引
db.users.getIndexes()

4.2.2 复合索引

// 创建复合索引
db.users.createIndex({lastName: 1, firstName: 1
})// 复合索引查询
db.users.find().sort({lastName: 1, firstName: 1
})

4.2.3 唯一索引

// 创建唯一索引
db.users.createIndex({email: 1}, {unique: true}
)// 部分唯一索引
db.users.createIndex({username: 1},{unique: true,partialFilterExpression: {age: {$gt: 18}}}
)

4.2.4 文本索引

// 创建文本索引
db.articles.createIndex({content: "text"},{weights: {content: 10,tags: 5},name: "content_text_index"}
)// 文本搜索
db.articles.find({$text: {$search: "MongoDB 数据库"}
})

4.2.5 地理空间索引

// 创建2dsphere索引
db.places.createIndex({location: "2dsphere"})// 地理位置查询
db.places.find({location: {$near: {$geometry: {type: "Point",coordinates: [116.4, 39.9]},$maxDistance: 1000}}
})

4.3 索引性能分析

4.3.1 查询执行计划

// 分析查询性能
db.users.find({username: "example"}).explain("executionStats")// 查看索引使用情况
db.users.find({username: "example"}).hint({username: 1})

4.3.2 索引选择策略

// 创建复合索引
db.products.createIndex({category: 1, price: -1
})// 高效查询
db.products.find({category: "电子产品",price: {$gt: 1000}
}).sort({price: -1})

4.4 索引管理

4.4.1 索引操作

// 删除指定索引
db.users.dropIndex({username: 1})// 删除所有索引(除_id)
db.users.dropIndexes()// 重建索引
db.users.reIndex()

4.4.2 后台创建索引

// 后台创建索引(不阻塞写操作)
db.users.createIndex({username: 1}, {background: true}
)

4.5 常见索引问题

4.5.1 索引开销

  • 写入性能下降
  • 额外存储空间
  • 定期评估和调整

4.5.2 最佳实践

  1. 仅为常用查询创建索引
  2. 避免过多索引
  3. 使用复合索引替代多个单字段索引
  4. 定期分析和优化

http://www.ppmy.cn/news/1561332.html

相关文章

模拟(算法-6)

模拟简介 模拟就是根据题目要求,比着葫芦画瓢,即直接按照题目要求写就行了 考察的是我们的编码能力 步骤: 演草纸上画图模拟(重要) 代码编写 虽然很多时候此类题比较简单,但是也有例外,如本文第…

ChatGPT 主流模型GPT-4/GPT-4o mini的参数规模是多大?

微软论文又把 OpenAI 的机密泄露了??在论文中明晃晃写着: o1-preview 约 300B;o1-mini 约 100BGPT-4o 约 200B;GPT-4o-mini 约 8BClaude 3.5 Sonnet 2024-10-22 版本约 175B微软自己的 Phi-3-7B,这个不用约…

[python3]Excel解析库-calamine,10倍openpyxl性能

calamine 是一个用于读取多种电子表格格式(如 Excel、LibreOffice Calc 等)的 Python 库。它支持 .xls, .xlsx, .ods 和 .csv 文件格式,提供了简单易用的 API 来加载和处理电子表格数据。calamine 的一大特点是它的轻量级和高效性&#xff0c…

基于Spring Boot的便民医疗服务小程序

一、系统概述 该小程序旨在解决传统医疗服务中存在的效率低下、安全性低以及信息传输不准确等问题。通过采用Spring Boot框架和微信小程序技术,实现了一个集用户注册登录、预约挂号、报告查询、健康日记、疫苗预约、健康体检、医疗知识等功能于一体的综合性医疗服务…

深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现

深度强化学习是人工智能领域最具挑战性的研究方向之一,其设计理念源于生物学习系统从经验中优化决策的机制。在众多深度强化学习算法中,软演员-评论家算法(Soft Actor-Critic, SAC)因其在样本效率、探索效果和训练稳定性等方面的优…

国内外服务器租用的区别是什么?

在如今的数字化社会中,服务器已经成为各个企业的重要网络设备,选择租用服务器也是企业和个人用户开展网络业务的重要选择,但是对于服务器租用国内外之间还是有着一定区别的,本文就来大概介绍一下吧! 首先,在…

【亚马逊云】如何提升AWS Support 计划支持

文章目录 一、什么是AWS Support 计划?1.1 开发人员支持1.2 业务支持1.3 Enterprise On-Ramp1.4 企业支持 二、Support 计划升级操作演示三、参考链接 一、什么是AWS Support 计划? AWS Support 提供的功能远不止传统的 IT 故障修复。除了加快您从运营中…

Matlab回归预测大合集(不定期更新)-188

截至2025-1-2更新 1.BP神经网络多元回归预测(多输入单输出) 2.RBF神经网络多元回归预测(多输入单输出) 3.RF随机森林多元回归预测(多输入单输出) 4.CNN卷积神经网络多元回归预测(多输入单输…