4-MongoDB索引知识

简介: 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提供了散列索引类型,它对字段值的散列进行索引。这些索引在其范围内的值分布更加随机,但只支持相等匹配,不支持基于范围的查询。

相关文章
|
4月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细介绍Nacos作为配置中心的实现原理与实战应用,涵盖配置管理、热更新、共享配置及优先级规则,并演示集群搭建与高可用部署,提升微服务架构下配置的动态管理能力。
|
4月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是微服务的统一解决方案,具备约定大于配置、组件丰富、开箱即用等特点。通过整合Netflix与Alibaba生态,形成完整技术栈,其中Spring Cloud Alibaba因Nacos、Sentinel等优秀组件成为主流选择。
|
4月前
|
Java 应用服务中间件 网络安全
Eclipse运行SSM/SSH项目教程
本文介绍了如何在Eclipse中导入并运行Java Web项目,涵盖基础软件安装(Eclipse、JDK、Tomcat)、项目导入步骤、Eclipse与Tomcat的绑定配置及常见问题处理。提供多个SSM/SSH实战项目案例与视频讲解,助你快速搭建开发环境并成功运行项目。
Eclipse运行SSM/SSH项目教程
|
4月前
|
存储 消息中间件 开发框架
应用架构图
技术架构是将业务需求转化为技术实现的关键过程,涵盖分层设计、技术选型与系统间调用关系。本文详解单体与分布式架构,包括展现层、业务层、数据层及基础层的职责,并阐述应用内外部调用关系与边界划分,构建清晰的技术蓝图。
|
4月前
|
uml C语言
系统时序图
时序图(Sequence Diagram)是UML中描述对象间消息传递时间顺序的交互图,横轴为对象,纵轴为时间,展现动态协作过程。它强调交互的时间次序,可用于建模并发进程与方法调用,核心元素包括角色、对象、生命线、控制焦点和各类消息,是分析系统行为的重要工具。
|
4月前
|
负载均衡 算法 架构师
Ribbon负载均衡
本文深入讲解Spring Cloud中Ribbon实现客户端负载均衡的原理,涵盖负载均衡概念、分类、常见算法,详解@LoadBalanced注解的作用机制,介绍如何自定义策略及配置饥饿加载,并对比服务端负载均衡,帮助读者全面理解微服务中的负载均衡技术。
|
4月前
|
Dubbo IDE API
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程搭建全过程,涵盖项目创建、模块配置、数据库导入及服务远程调用实现。通过两种方案快速部署工程,使用RestTemplate完成服务间HTTP通信,帮助开发者掌握微服务基础架构与调用机制。
|
4月前
|
Java Nacos Maven
Eureka服务注册与发现
本节介绍Spring Cloud中Eureka注册中心的搭建与使用,完成user-service和order-service服务注册,并实现多实例部署。虽Eureka逐步被Nacos替代,但仍具学习价值,为后续服务发现组件替换奠定基础。(239字)
|
4月前
|
存储 缓存 Java
自定义注解
本文介绍如何在Spring框架中实现自定义注解,结合AOP与过滤器应用于日志记录、权限控制等场景,通过代码示例展示注解定义、元注解使用及拦截处理流程,涵盖从基础到进阶的完整实现步骤。
|
4月前
|
安全 Java Spring
2.过滤器链加载原理
本文深入解析Spring Security过滤器加载机制,通过源码分析DelegatingFilterProxy、FilterChainProxy与SecurityFilterChain的工作流程,揭示十五个安全过滤器如何自动装配并执行,帮助理解框架底层原理,为自定义认证页面奠定基础。