4-MongoDB索引知识

简介: MongoDB索引基于B树结构,支持单字段、复合、地理空间、文本及哈希索引,有效提升查询效率,避免全表扫描,适用于等值、范围、排序与全文检索,显著优化大数据量下的查询性能。

MongoDB索引通过B树结构提升查询效率,避免全表扫描。支持单字段、复合、地理空间、文本及哈希索引,适用于等值、范围、排序、全文检索等场景,显著提升大数据量下的查询性能。
4.1 概述
索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
如果查询存在适当的索引,MongoDB可以使用该索引限制必须检查的文档数。 索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。索引存储特定字段或一组字段的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作。此外,MongoDB还可以使用索引中的排序返回排序结果。 MongoDB索引使用B树数据结构(确切的说是B-Tree,MySQL是B+Tree)
官网文档:https://docs.mongodb.com/manual/indexes/
4.2 索引的类型
4.2.1 单字段索引
MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,称为单字段索引(Single Field Index)。 对于单个字段索引和排序操作,索引键的排序顺序(即升序或降序)并不重要,因为MongoDB可以在任何方向上遍历索引。

4.2.2 复合索引
MongoDB还支持多个字段的用户定义索引,即复合索引(Compound Index)。复合索引中列出的字段顺序具有重要意义。例如,如果复合索引由 { userid: 1, score: -1 } 组成,则索引首先按userid正序排序,然后在每个userid的值内,再在按score倒序排序。

4.2.3 其他索引
地理空间索引(Geospatial Index)
为了支持对地理空间坐标数据的有效查询,MongoDB提供了两种特殊的索引:返回结果时使用平面几何的二维索引和返回结果时使用球面几何的二维球面索引。
文本索引(Text Indexes)
MongoDB提供了一种文本索引类型,支持在集合中搜索字符串内容。这些文本索引不存储特定于语言的停止词(例如“the”、“a”、“or”), 而将集合中的词作为词干,只存储根词。
哈希索引(Hashed Indexes)
为了支持基于散列的分片,MongoDB提供了散列索引类型,它对字段值的散列进行索引。这些索引在其范围内的值分布更加随机,但只支持相等匹配,不支持基于范围的查询。

相关文章
|
2月前
|
人工智能 JSON 数据挖掘
大模型应用开发中MCP与Function Call的关系与区别
MCP与Function Call是大模型应用的两大关键技术。MCP为模型与外部工具提供标准化通信协议,实现跨模型、跨平台集成;Function Call则是模型调用外部函数的内置机制。前者如“蓝牙协议”,支持多设备互联,后者像“语音助手”,限于单机操作。两者在功能上互补:MCP支持工具热插拔、权限控制与远程调用,适用于企业级复杂系统;Function Call开发简单,适合快速验证单一模型能力。未来趋势将走向融合,形成“模型解析-协议传输-工具执行”的分层架构,推动AI应用生态标准化发展。
|
2月前
|
XML 算法 安全
详解RAG五种分块策略,技术原理、优劣对比与场景选型之道
RAG通过检索与生成结合,提升大模型在企业场景的准确性与安全性。分块策略是其核心,直接影响检索效果与回答质量。本文系统解析五种主流分块方法:固定大小、语义、递归、基于文档结构及LLM分块,对比其优缺点与适用场景,并提出组合优化路径,助力构建高效、可信的RAG系统。
|
2月前
|
监控 Java 调度
XXLJob定时任务概述
定时任务指按时间表达式周期执行的任务,适用于对账、提醒、订单超时等场景。实现方式包括单体架构的轮询休眠、Timer、ScheduledExecutorService、Quartz及SpringTask;分布式架构面临重复执行、动态调整、故障转移等问题,主流方案有XXL-JOB、Elastic-Job、Saturn和ScheduleX等。
|
2月前
|
存储 负载均衡 算法
负载均衡算法
随机调用适用于性能均衡的服务器,可升级为加权随机以适配性能差异。轮询按序调用,支持加权提升调度精度,如权重[3,1]对应调用序列AAABA。最小活跃数优先选择负载低的节点,动态均衡负载。源地址哈希通过IP取模确保同一IP访问固定节点。一致性哈希将节点与请求映射至Hash环,实现节点变动时最小化数据迁移,保障服务稳定。
|
2月前
|
Java 测试技术 Linux
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev/test/pre/prod)高效发布与运维。涵盖各环境职责、基于Jenkins+K8S的CI/CD流程、分支管理、一键发布及Skywalking日志链路追踪,提升发布效率与故障排查能力。
|
2月前
|
前端开发 程序员
SpringCloud常见注解及使用说明
本文介绍了SpringMVC中@RequestMapping注解的作用及原理,它用于将HTTP请求映射到控制器方法,实现前后端接口路径对应。并通过@GetMapping等派生注解简化常用请求类型处理,提升开发效率。
|
2月前
|
运维 Devops 开发工具
生产环境缺陷管理
为解决大型团队中多分支开发导致的bug漏修、漏发等协同难题,我们基于go-git打造了开源工具git-poison。它实现分布式bug追溯与管理,支持投毒、解毒、银针三步闭环,自动阻塞带严重bug的版本发布,降低沟通成本,提升发布安全性,已在实际生产中稳定运行超一年。
|
2月前
|
存储 数据库
数据库设计三范式
本文详解数据库三范式:第一范式要求字段原子性,不可再分;第二范式在满足第一范式基础上,消除部分依赖,确保主键唯一确定非主键;第三范式消除传递依赖,避免非主键间推导。通过实例分析,说明范式优化可减少冗余、提升维护性,但也需结合实际灵活设计表结构。
|
2月前
|
SQL 安全 关系型数据库
了解SQL注入
SQL是一种用于管理数据库的标准语言,广泛应用于MySQL、Oracle等系统。它支持数据查询、操作与管理,常为Web应用提供后端服务。通过用户输入动态构建SQL语句时,若缺乏有效验证,易遭SQL注入攻击。攻击者可借此绕过认证、窃取数据、篡改内容,甚至执行系统命令。OWASP将其列为头号Web安全威胁。防御措施包括输入验证(白名单优于黑名单)、使用参数化查询、错误信息屏蔽及部署入侵防御系统。尤其推荐在代码层面采用预编译语句,防止恶意SQL执行。
|
2月前
|
SQL Dubbo Java
线程池:故障梳理总结
本文从故障与技术双重视角,总结线程池类常见问题。通过真实案例剖析数据库慢查询、锁争抢、DDL阻塞、连接池配置不当等引发的线程池满故障,揭示背后共性:系统某处变慢导致资源耗尽。分享Dubbo、HTTP、Druid、Redis等连接池超时设置最佳实践,强调fast-fail理念与流控、背压、重试避坑策略,助力开发者提升系统稳定性。