在MongoDB中索引某些字段的成本有多高,
我有一个表,其中我想要将两个字段结合在一起,每个字段都建议复合索引,并将其设置为true。但我所做的是“同时添加field1_field2并使其成为键,这样field2对于field1总是唯一的。”(并添加应用程序逻辑),因为我认为索引非常昂贵。
而且,当MongoDB文档建议我们不要像自动递增数字那样使用自定义对象ID时,我最终给了类、学生等模型很大的数字(在sql中我可以很容易地使用1,2,3 ),我没有想过添加一个新的字段来编号和索引该字段以进行查询。
生产的最佳实践建议是什么?
发布于 2016-03-23 14:28:58
与您自己的索引字段系统相比,使用复合索引的优点是复合索引允许比常规索引字段更快地排序。它还降低了每一份文件的大小。
在您的示例中,如果您希望按照field1升序和field2降序中的值对文档进行排序,最好使用复合索引。如果只想获得包含在field1_field2中的某些特定值的文档,那么使用复合索引或常规索引字段并不重要。
但是,如果文档中的单独字段中已经有field1和field2,并且还有一个包含field1_field2的字段,那么最好在field1和field2上使用复合索引,只需删除包含field1_field2的字段。这可以降低每个文档的大小,并最终减少数据库的大小。
关于索引的成本,如果您想沿着这条路线前进,几乎必须对field1_field2进行索引。基于MongoDB中未索引字段的查询非常慢。而且,当文档有索引字段时,将文档添加到数据库中并不需要太多时间(我们指的是1毫秒左右)。请注意,在许多现有文档上添加索引可能需要几分钟时间。这就是为什么通常在添加任何文档之前规划索引策略的原因。
TL;DR:
如果磁盘空间有限或需要对结果进行排序,请使用复合索引并删除field1_field2。否则,使用field1_field2,但它必须被索引!
https://stackoverflow.com/questions/36180133
复制相似问题