一个好的索引策略对于确保您的MongoDB数据库以最有效的方式返回结果至关重要。要构建一个稳固的策略,您需要考虑数据库模式、使用模式和数据库服务器配置等因素。
在本篇文章中,您将学习数据库索引是什么,如何在MongoDB中使用它们,以及如何利用MongoDB Atlas性能顾问来优化您的查询。
数据库索引是一种特殊的数据结构,它提供了更快的访问数据的能力,并有助于创建高性能的应用程序。索引通常由两列组成:搜索键和数据指针。键存储您想要搜索的值,指针指向数据所在的数据块。假设您有一个名为'exam'的集合(表)的'score'字段(列)上的索引。当您想访问分数小于40的分数时,索引将扫描数据块而不是单个文档(行)。
数据库索引的示例
没有索引,数据库引擎需要遍历每个记录以查看是否存在匹配项。
数据库索引是组织信息的一种方式,以便数据库引擎可以快速找到相关结果。
您可以在分组、排序和数据检索上节省大量时间。数据库允许您添加多个索引,从而进一步提高查询效率。
将数据库索引想象成书索引(通常在书末尾)。每个关键词都按字母顺序列出,并列出使用该词的页码,使用户能够快速查找该词。数据库索引的工作方式与此类似。假设您在数据库中存储了1000个关键词名称。如果它们按名称(a->z或z->a)排序,则根据排序查找最后一个关键词、中间关键词或特定关键词会更简单。
如何通过索引加速查询结果
在决定要索引哪些字段或集合时,请考虑在查询中使用更频繁的数据——例如,姓名、ID或两者组合,根据需要。类似地,索引您最可能用于排序、分组或排序数据的字段。
与传统数据库一样,MongoDB使用索引来优化查询。MongoDB中的任何集合都可以有一个或多个索引,这些索引可以针对一个或多个字段创建。您不能重复MongoDB索引——这很好,因为索引确实有一定的成本,这就是为什么您需要制定一个好的策略来创建索引的原因。
假设您有一个销售集合,并且您想要获取季度的文档列表。如果您没有索引,数据库引擎需要遍历数据库中的每个记录,验证日期是否在指定范围内,如果是在,则将其添加到结果中。
查询集合中的所有文档很耗时,会占用许多资源。
如果您在销售日期上创建了数据库索引,数据库引擎将快速找到第一个匹配的文档,并遍历列表直到达到所需的结束日期。这比逐个记录查找要高效得多。
跟随我们的大学课程了解更多关于MongoDB索引的信息。
MongoDB中有很多种索引类型可用。最常见的是单字段和复合索引类型。如果您处理数组、聚合、地理空间数据或全文搜索,则可以使用更高级的索引类型。您可以在文档中找到有关这些索引类型的更多信息。
MongoDB中的每个集合都自动在_id字段上创建一个索引。这个索引可以用来高效地从数据库中检索文档。
然而,您大部分时间需要查询其他特定字段上的数据。这时,单字段索引就派上用场了。
比如说,您想定期获取前三个销售额。
这里一个不错的索引是金额字段。
db.collection.createIndex( { amount: 1 });
前三个销售额总是索引中的前三个元素,这使得它比每次查询整个集合要快得多。
为查询创建正确的索引并不总是显而易见的。然而,有一个通用的规则可以帮助您,称为ESR(等价、排序、范围)规则。
这个规则是一个思维框架,描述了如何构建您的复合索引。从使用精确匹配的字段开始,添加用于排序的字段,最后添加用于非精确匹配的字段(即$lt或$ne运算符)。
MongoDB Atlas使用与MongoDB相同的索引原则,但提供了快速创建索引的工具。
您可以使用Mongo中的createIndex方法创建索引。
db.collection.createIndex( <key and index type specification>, <options> )
Atlas UI提供了一个图形用户界面,让您可以创建索引。您还可以使用Atlas Search添加全文搜索索引。
您也可以像创建一样容易地使用Atlas UI或Mongosh删除索引。
db.collection.dropIndex(<index name>)
在Atlas中,您可以从浏览集合页面的索引标签中删除索引。
使用MongoDB Atlas UI删除数据库索引
当数据库存在性能问题时,一个简单的解决方案通常是添加适当的索引。这些索引将为您的集合创建一个排序映射,以便更容易检索文档。要找出需要创建哪些索引,您应使用ESR规则或MongoDB Atlas中的性能顾问。您甚至可以免费试用。一旦您开始向集合添加适当的索引,您应该能够看到查询性能的显著提升。
数据库索引是集合到文档的映射,使其更容易检索文档。MongoDB可以通过列出映射到集合的排序文档来轻松找到匹配您的查询的文档。
是的,MongoDB支持多种数据库索引类型。最常见的是单字段和复合索引。更高级的索引类型包括多键、地理空间、文本和散列索引。
是的,MongoDB被认为支持巨大的数据集。高效查询这些数据的关键是良好的索引策略。