我应该联合索引ActiveRecord多态关联吗?

我有一个我希望非常大的度量表。 它具有多态关联,因此它可以属于想要记录某些度量的其他模型。 我通常索引像这样的关联列来加速关联加载。 我听说有人在谈论联合索引这种关联 。 这看起来像:

add_index :comments, [:commentable_type, :commentable_id]

但我也听到过反对创建低基数指数的建议 ,因为指数的收益并没有抵消维持指数的开销。 由于我的多态关联的_type一半可能在数百万行中只有4-5个值,所以我倾向于只对多态关联的_id部分进行索引。 我可能会使用_id列和一些其他未提及的整数和日期时间列创建一些额外的联合索引,但我也不会在这些索引中包含_type。

这是你会做/推荐的吗?

最终,在实际数据集上添加索引之前和之后,这值得进行基准测试 – 在大小和数据方面是现实的。

但是,您不是仅使用几个值在字段上创建索引。 索引是两个字段的组合 ,可能有很多不同的值组合。 组合字段的索引是一个聪明的想法。

在多个字段上创建索引时,最好先选择最具选择性的字段。 由于您只有4-5个commentable_type值,因此您最好这样做:

 add_index :comments, [:commentable_id, :commentable_type]