数据库复合索引最佳实践 Mongo 数据库

DB Compound indexing best practices Mongo DB

索引 MongoDB、

中的某些字段的成本是多少

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

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

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

与您自己的索引字段系统相比,使用复合索引的优势在于复合索引允许比常规索引字段排序更快。它还降低了每个文档的大小。

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

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

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

长话短说:

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