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

目录
相关文章
|
6月前
|
NoSQL Linux Shell
2-MongoDB单机部署
本文介绍了MongoDB在Windows和Linux系统下的安装、配置与启动方法,包括下载地址、版本选择、解压安装、命令行及配置文件启动方式,并详细说明了如何通过Shell和图形化工具Compass连接数据库。同时提供常见问题解决方案及附件中的各环境安装包链接,便于快速部署使用。
153 0
|
6月前
|
存储 消息中间件 Apache
ZooKeeper 实战指南:从入门到场景解析
Apache ZooKeeper是分布式系统的协调核心,本文带你快速搭建环境,掌握Znode操作与Watcher机制,深入理解其在分布式锁、配置管理、服务发现等场景的应用,并解析美团Leaf中的实践案例。
1246 207
|
6月前
|
监控 Java 开发工具
Android 崩溃监控实战:一次完整的生产环境崩溃排查全流程
某 App 新版上线后收到大量用户投诉 App 闪退和崩溃。仅凭一条崩溃日志和会话追踪,团队如何在2小时内锁定「快速刷新导致数据竞态」这一根因?本文带你复现真实生产环境下的完整排查路径:从告警触发、堆栈分析、符号化解析,到用户行为还原——见证 RUM 如何让“无法复现的线上崩溃”无所遁形。
817 77
|
人工智能 缓存 运维
探秘 AgentRun丨通过无代码创建的 Agent,如何用高代码进行更新?
AgentRun 打破 AI Agent 开发困局,无代码快速验证想法,一键转高代码实现深度定制。60 秒创建 Agent,支持多模型、工具集成与 Prompt 优化;业务增长后可平滑演进,保留配置生成高质量代码,助力从原型到生产的持续迭代。
477 31
|
6月前
|
消息中间件 人工智能 NoSQL
AgentScope x RocketMQ:打造企业级高可靠 A2A 智能体通信基座
Apache RocketMQ 推出轻量级通信模型 LiteTopic,专为 AI 场景设计,结合 A2A 协议与 AgentScope 框架,实现多智能体高效、可靠协作,支持海量会话持久化、断点续传与动态订阅,重塑企业级 AI 应用架构。
375 28
|
6月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用(读
Thread.Sleep用于让线程暂停执行一段时间,不参与CPU竞争。Sleep(1000)并不保证精确唤醒时间,因系统调度受优先级和资源影响;而Sleep(0)会触发系统立即重新分配CPU,给予其他线程执行机会,避免界面假死,具有实际意义。
|
6月前
|
NoSQL Java 测试技术
5-MongoDB实战演练
本文介绍某头条文章评论功能的设计与实现,基于SpringDataMongoDB构建微服务,完成评论的增删改查、按文章ID查询、分页查询及点赞功能。通过MongoTemplate优化点赞操作,提升性能,并使用索引提高查询效率,整体方案高效且可扩展。
227 0
 5-MongoDB实战演练
|
6月前
|
存储 NoSQL 关系型数据库
1-MongoDB相关概念
MongoDB是一款高性能、无模式的文档型NoSQL数据库,适用于高并发、海量数据、高可用性场景。其灵活的BSON文档模型、丰富的查询支持及水平扩展能力,广泛应用于社交、游戏、物联网等领域,尤其适合非事务性、快速迭代的应用系统。
106 0
 1-MongoDB相关概念
|
6月前
|
缓存 算法 Java
IO/线程 线程池
本文深入剖析Java线程池的工作原理,涵盖ThreadPoolExecutor与ScheduledThreadPoolExecutor的实现机制。通过源码分析,详解线程池如何管理线程生命周期、任务调度策略及延时队列等核心组件,并结合Executors工具类说明各类线程池的应用场景。
88 0
|
6月前
|
存储 JSON NoSQL
3-MongoDB常用命令
本文介绍MongoDB数据库操作,包括创建和删除数据库、集合的显式与隐式创建及删除,以及文档的增删改查。重点讲解文章评论数据存储至articledb库中的实际应用,涵盖批量插入、条件查询、分页排序等常用操作,帮助掌握MongoDB基本CRUD技能。
110 0
 3-MongoDB常用命令

热门文章

最新文章