MongoDB索引定义策略

时间:2016-01-27 11:48:07

标签: performance mongodb indexing query-optimization database-performance

我有一个基于MongoDB的数据库,其中包含大约100K到500K的文本文档,并且该集合不断增长。系统应支持文档的不同字段的查询,例如,标题,类别,重要性等。

该系统是一个近乎实时的系统,每隔5-10分钟就能获得一份新文件。

我的问题:
为了提高查询的性能,为文档的每个频繁查询字段(字段类型:小文本,数字,日期)定义单独的索引,这是一个好主意吗?或者在MongoDB中还有另一种查询性能提升的最佳实践?

1 个答案:

答案 0 :(得分:3)

您应该使用/ make index,具体取决于您尝试查找的结果。 在不同的时间为不同的字段设置不同的索引是个好主意。

但请记住,索引会占用您的RAM。你做的索引越多,它就会使用你的RAM。在考虑更好的搜索时,还要考虑索引的排序。

在制定索引策略时,您应该深入了解应用程序的查询。在构建索引之前,映射将要运行的查询类型,以便您可以构建引用这些字段的索引。索引具有性能成本,但是对于大型数据集上的频繁查询而言,它们的价值更高。考虑应用程序中每个查询的相对频率以及查询是否证明索引是合理的。

设计索引的最佳总体策略是使用与您将在生产中运行的数据集类似的数据集来分析各种索引配置,以查看哪些配置执行得最好。检查为集合创建的当前索引以确保它们正在支持您当前和计划的查询。如果不再使用索引,请删除索引。

创建时选择的一些策略:

  1. Create Indexes to Support Your Queries 当索引包含查询扫描的所有字段时,索引支持查询。创建支持查询的索引可以大大提高查询性能。

  2. Use Indexes to Sort Query Results 要支持高效查询,请在指定索引字段的顺序和排序顺序时使用此处的策略。

  3. Ensure Indexes Fit in RAM 当索引适合RAM时,系统可以避免从磁盘读取索引,并且您可以获得最快的处理速度。

  4. Create Queries that Ensure Selectivity 选择性是查询使用索引缩小结果的能力。选择性允许MongoDB将索引用于与完成查询相关的大部分工作。