Mongo字段值的分布是否会影响索引性能?

时间:2017-11-30 15:58:36

标签: database mongodb indexing

如果Mongo集合中的索引字段的分布不均匀,例如具有公共前缀

{
  field: 'systemID_4628937419',
  ...
}
{
  field: 'systemID_0189347591',
  ...
}

与具有均匀分布值的字段相比,是否存在性能影响?

我可以想象一个索引使用了一些变换/散列值,所以无论实际值的分布如何,索引操作的值都很好地分布,但我不知道。

或许它甚至不需要,而且价值分配也不会影响性能。

1 个答案:

答案 0 :(得分:0)

您可以为_id字段使用任何类型的值(Arrays除外)。最佳选择(原因是默认的mongo实现)是使用 ObjectId

如果您选择不使用ObjectId,您必须以某种方式保证值的唯一性。

如果检查(http://docs.mongodb.org/manual/reference/object-id/)及其十六进制表示,实际上有12个字节的差异,ObjectId为12个字节,任何其他字符串_id十六进制表示为24。

Object_id具有更多存储效率,也可以以特殊方式使用,以确保只加载部分索引;使用的部件。这在插入时变得非常明显,其中只需要加载该索引的最新部分以确保唯一性。