【问题标题】:MongoDB Index definition strategyMongoDB索引定义策略
【发布时间】:2023-03-23 06:01:02
【问题描述】:
我有一个基于 MongoDB 的数据库,其中包含大约 100K 到 500K 的文本文档,并且该集合不断增长。系统应支持文档不同字段的查询,例如标题、类别、重要性等。
该系统是一个近乎实时的系统,每 5-10 分钟获取一次新文档。
我的问题:
为了提高查询的性能,为文档的每个经常查询字段(字段类型:小文本、数字、日期)定义一个单独的索引是个好主意吗?或者还有其他在 MongoDB 中提升查询性能的最佳实践?
【问题讨论】:
标签:
performance
mongodb
indexing
query-optimization
database-performance
【解决方案1】:
您应该根据您尝试查找的结果来使用/制作索引。
为您尝试在不同时间查找的不同字段设置不同的索引是一个非常好的主意。
但请记住,索引会占用您的 RAM。您制作的索引越多,它将使用您的 RAM。在进行更好的搜索时,还要考虑对索引进行排序。
在制定索引策略时,您应该深入了解应用程序的查询。在构建索引之前,请规划出您将运行的查询类型,以便您可以构建引用这些字段的索引。索引会带来性能成本,但对于大型数据集的频繁查询来说,它的成本是值得的。考虑应用程序中每个查询的相对频率以及查询是否证明索引是合理的。
设计索引的最佳总体策略是使用与您将在生产中运行的数据集相似的数据集来分析各种索引配置,以查看哪些配置表现最佳。检查为您的集合创建的当前索引以确保它们正在支持您当前和计划中的查询。如果不再使用某个索引,请删除该索引。
创建时选择的一些策略:
Create Indexes to Support Your Queries
当索引包含查询扫描的所有字段时,索引支持查询。创建支持查询的索引会大大提高查询性能。
Use Indexes to Sort Query Results
为支持高效查询,请在指定索引字段的顺序和排序顺序时使用此处的策略。
Ensure Indexes Fit in RAM
当您的索引适合 RAM 时,系统可以避免从磁盘读取索引,您可以获得最快的处理速度。
Create Queries that Ensure Selectivity
选择性是查询使用索引缩小结果的能力。选择性允许 MongoDB 将索引用于与完成查询相关的大部分工作。