DB复合索引最佳实践Mongo DB

时间:2016-03-23 13:52:25

标签: mongodb indexing database-schema database

索引MongoDB中的某些字段的费用是多少,

我有一个表格,我希望结合两个字段的唯一性,我搜索的每个地方都建议使用唯一设置为true的复合索引。但我正在做的是“追加field1_field2并使其成为一个键,因此field2对于field1将始终是唯一的。(并添加应用程序逻辑)因为我认为索引是昂贵的。

而且,由于MongoDB文档建议我们不要使用自定义对象ID,比如自动递增数字,我最终会给类,类,学生等模型提供大数字(我可以在sql中使用容易使用的1,2,3) lite),我没想到为编号添加一个新字段并索引该字段用于查询。

生产的最佳实践建议是什么

1 个答案:

答案 0 :(得分:2)

使用复合索引与您自己的索引字段系统的优点是复合索引允许比常规索引字段更快地进行排序。它还可以降低每个文档的大小。

在您的情况下,如果您希望使用field1升序和field2降序中的值对文档进行排序,则最好使用复合索引。如果您只想获取field1_field2中包含某些特定值的文档,那么使用复合索引或常规索引字段并不重要。

但是,如果您在文档中的单独字段中已经有field1field2,并且您还有一个包含field1_field2的字段,那么最好使用复合索引field1field2,只需删除包含field1_field2的字段即可。这可以降低每个文档的大小,并最终减小数据库的大小。

关于索引的成本,如果你想要沿着那条路走下去,你几乎必须索引field1_field2。基于MongoDB中未编制索引的字段的查询真的慢。当文档具有索引字段时,我们不需要花费太多时间将文档添加到数据库(我们说的是1毫秒左右)。请注意,在许多现有文档上添加索引可能需要几分钟时间。这就是您在添加任何文档之前通常计划索引策略的原因。

TL; DR:

如果您的磁盘空间有限或需要对结果进行排序,请使用复合索引并删除field1_field2。否则,请使用field1_field2,但必须将其编入索引!