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

相关文章
|
1天前
|
前端开发 Java 数据库连接
RuoYi
若依(RuoYi)是一款基于SpringBoot、SpringCloud的开源快速开发平台,支持单体与微服务架构。提供权限管理、代码生成器、多版本前端(Vue/Uniapp),集成Redis、Nacos等主流组件,具备响应式布局与多设备适配能力,全系列免费商用。
RuoYi
|
1天前
|
Java 数据库连接 mybatis
Mybatis及MybatisPlus
本文系统介绍MyBatis核心架构与常用功能,涵盖配置流程、结果集映射、参数传递、XML配置项、缓存机制及分页插件应用,并简要介绍MyBatis Plus的常用API,助力高效开发。
Mybatis及MybatisPlus
|
1天前
|
存储 中间件 消息中间件
应用架构图
技术架构是将业务需求转化为技术实现的关键环节,涵盖分层设计、技术选型与系统集成。本文介绍单体与分布式架构的设计原则,包括展现层、业务层、数据层及基础层的职责划分,并阐述应用间调用关系、外部系统集成与边界定义,助力构建清晰、可扩展的技术体系。(238字)
 应用架构图
|
1天前
|
开发工具 git 运维
生产环境缺陷管理
git-poison基于go-git实现,通过“投毒-解毒”机制自动化追踪和管理多分支环境下的bug修复,避免人为疏漏导致的生产事故,降低协同成本,提升发布安全与效率。
生产环境缺陷管理
|
1天前
|
Kubernetes 容器 运维
物理部署图
物理部署图描述系统运行时的硬件配置与软件部署结构,展现节点、构件、物件及连接关系,帮助理解分布式系统的网络架构与运维逻辑,是实现应用与硬件协同运行的重要设计工具。
 物理部署图
|
1天前
|
Java 数据安全/隐私保护 安全
2.通用权限管理模型
本文介绍了ACL和RBAC两种常见的权限模型。ACL通过直接为用户或角色授权实现访问控制,简单直观;RBAC则基于角色进行权限管理,支持角色继承与职责分离,结构更清晰、易于维护,是现代系统主流的权限设计方式。
2.通用权限管理模型
|
1天前
|
Java 调度 容器
线程池
本文深入剖析了Java线程池的核心原理,涵盖ThreadPoolExecutor与ScheduledThreadPoolExecutor的实现机制,重点解析了任务调度、线程复用、阻塞队列及周期性执行等关键技术,并结合源码阐述了Executors工具类和ThreadLocal的应用。
 线程池
|
1天前
|
Java 数据安全/隐私保护 Spring
3.实现权限管理的技术
本文介绍了权限管理的常见技术选型,对比了Apache Shiro、Spring Security及自定义ACL的优缺点,帮助开发者根据项目需求选择合适方案。
 3.实现权限管理的技术
|
1天前
|
uml C语言
系统时序图
时序图(Sequence Diagram)是UML中描述对象间消息传递时间顺序的交互图。横轴为对象,纵轴为时间,通过生命线、控制焦点和消息等元素,展现系统动态协作过程,强调交互的时间顺序与并发行为,常用于分析和设计系统逻辑。
 系统时序图
|
1天前
|
领域建模 数据采集 数据库
领域模型图(数据架构/ER图)
本文介绍如何通过四色原型法进行领域建模,构建数据架构中的ER图。基于业务流程提取时标性原型(MI)、参与方-地点-物品原型(PPT)、角色原型(Role)和描述原型(DESC),逐步建立风控系统的领域模型,并最终转化为实体关系图(ER图),实现从业务到数据模型的精准映射。(238字)
 领域模型图(数据架构/ER图)