如果Mongo集合中的索引字段的分布不均匀,例如具有公共前缀
{
field: 'systemID_4628937419',
...
}
{
field: 'systemID_0189347591',
...
}
与具有均匀分布值的字段相比,是否存在性能影响?
我可以想象一个索引使用了一些变换/散列值,所以无论实际值的分布如何,索引操作的值都很好地分布,但我不知道。
或许它甚至不需要,而且价值分配也不会影响性能。
答案 0 :(得分:0)
您可以为_id字段使用任何类型的值(Arrays除外)。最佳选择(原因是默认的mongo实现)是使用 ObjectId 。
如果您选择不使用ObjectId,您必须以某种方式保证值的唯一性。
如果检查(http://docs.mongodb.org/manual/reference/object-id/)及其十六进制表示,实际上有12个字节的差异,ObjectId为12个字节,任何其他字符串_id十六进制表示为24。
Object_id具有更多存储效率,也可以以特殊方式使用,以确保只加载部分索引;使用的部件。这在插入时变得非常明显,其中只需要加载该索引的最新部分以确保唯一性。