首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB复合索引最佳实践

问DB复合索引最佳实践
EN

Stack Overflow用户
提问于 2016-03-23 13:52:24
回答 1查看 946关注 0票数 4

在MongoDB中索引某些字段的成本有多高,

我有一个表,其中我想要将两个字段结合在一起,每个字段都建议复合索引,并将其设置为true。但我所做的是“同时添加field1_field2并使其成为键,这样field2对于field1总是唯一的。”(并添加应用程序逻辑),因为我认为索引非常昂贵。

而且,当MongoDB文档建议我们不要像自动递增数字那样使用自定义对象ID时,我最终给了类、学生等模型很大的数字(在sql中我可以很容易地使用1,2,3 ),我没有想过添加一个新的字段来编号和索引该字段以进行查询。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,但它必须被索引!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36180133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档