Module 02 · Introducing MongoDB: An Open-Source NoSQL Database
Indexes索引在 MongoDB 中的应用
欢迎观看关于 MongoDB 索引 的介绍视频。通过本视频,您将能够:
- 解释为什么需要索引,
- 使用索引来执行高效的搜索和排序,
- 了解 MongoDB 如何存储索引。
为什么需要索引?
索引 是帮助我们快速定位数据的工具,避免了遍历所有数据。例如,如果您在查找一本名为《Designing Data-Intensive Applications》的书,而没有索引,您可能需要查看每一排书籍。使用索引后,您只需进入计算机类书籍部分,然后找到数据库专区,最后找到正确的书架,就能快速定位到这本书。
日常生活中,我们也常用到索引来加速查找。例如,在电话簿中,所有的名字都按照姓氏和名字字母排序。这样,您可以直接跳到姓氏为 Doe 的部分,再根据名字查找 John。
在数据库系统中,我们会为最常查询的字段创建索引,来提高查询效率。
MongoDB 中的索引应用
在 Campus Management 数据库 中,如果我们需要按 courseId 查找学生,而不是扫描整个集合,我们可以在 course enrollment 集合上为 courseId 字段创建索引。索引会将 courseId 按升序排列,从而使得查找相关文档变得更加高效。
db.courseEnrollment.createIndex({ courseId: 1 })
courseId : 1 表示索引按升序排列。使用这个索引时,查询操作会更快,但如果我们需要按 studentId 排序学生,MongoDB 会在内存中执行排序操作,这会降低效率。
复合索引(Compound Index)
为了更高效地按 studentId 排序,可以将 courseId 和 studentId 都包含在索引中,形成一个复合索引。这样,MongoDB 就可以在找到符合 courseId 的文档时,直接按 studentId 排序,而无需再次进行内存排序。
db.courseEnrollment.createIndex({ courseId: 1, studentId: 1 })
这样,查询时,不仅能高效找到符合 courseId 的文档,还能直接按 studentId 排序。
MongoDB 中索引的存储方式
MongoDB 中的索引是特殊的数据结构,用于存储被索引字段的值和该文档在磁盘上的位置。索引本质上是一种树形结构,具体来说,是 平衡树。
- 平衡树 保证了查询效率,因为它能确保树的深度最小,查找操作可以在最短的时间内完成。
举个例子,在 复合索引 中,courseId 是第一个索引字段,并按升序排列。每个树节点下,将按 studentId 排序,从而使得文档的查找更加高效,无论是等值查询还是范围查询。
如果查询字段已经被索引,MongoDB 就不需要再次对这些字段进行排序。
总结
通过本视频,您学习了:
- 索引 帮助我们快速定位数据,避免遍历整个数据集。
- 应为最常用的查询字段创建索引,尤其是那些经常被查询的字段。
- 复合索引 能同时对多个字段进行索引,提高查询效率。
- MongoDB 使用树形结构(平衡树)存储索引,使查找操作更加高效。