MongoDB中的部分索引:简短概述
#database #index #mongodb #backend

封面图片学分:Digital Ocean

介绍

如果您在MongoDB中使用了indexes,那么您必须知道它们的重要性和巨大的绩效增长。它是使用MongoDB和索引的几乎每个项目的一部分,在改善查询执行性能中起着至关重要的作用。

问题

但是,索引并非没有成本。索引通常存储在内存中,但这可能并非一直如此。您的项目可能包含许多索引或一些大索引,并且您的计算机可用内存可能不足以容纳所有索引。

在这种情况下,将一些索引存储在内存中,而其余部分则存储在存储中。与内存访问相比,存储访问可能非常慢。因此,这可能会减慢您的查询执行。

一个办法

部分索引可在某种程度上用于减轻此问题。

部分索引是索引的一种空间效率技术,仅是那些最常查询的文档。例如,如果在线图书商店的客户在大部分时间内搜索具有3个或以上评级的书籍,那么仅将这些文档索引为3或以上的文档就足以满足大多数搜索的低延迟查询。这减少了所需索引的大小。

用法

以下是创建一个方法,假设收集名称为 book penre 是文档架构中的一个字段:

db.books.createIndex(
  { genre: 1 },
  { partialFilterExpression: { rating: { $gte: 3 } } }
)

可以使用任何形式的索引,例如单键索引,多键索引甚至复合索引。

这是使用索引的方法:

db.books.find({ genre: "Astronomy", rating: { $gt: 3.5 } })

警告

必须在查询中是匹配的滤波器表达式,以触发任何部分索引的使用。在上面的示例中,将使用部分索引,因为额定值上的查询过滤器肯定会导致文档,这些文档构成了使用上述createIndex()函数索引的文档的正确子集。

如果查询可以在索引索引之外产生一些文档,则不会使用部分索引,甚至不适用于使用部分索引来获取的文档。因此,您的查询需要确保部分索引之外没有任何文件可以被扫描。

结论

本质上,部分索引可以用于经常查询的文档上,并且您对这些查询的P90或P99潜伏期不太担心。这将有助于减少存储索引的内存要求。

注意
这篇文章的目的只是使开发人员意识到部分索引。

有关部分索引的更多详细信息,功能和用例,请访问official documentation