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

时间:2010-10-21 04:09:15

标签: ruby-on-rails activerecord migration polymorphic-associations indexing

我有一个我希望非常大的指标表。它具有多态关联,因此它可以属于想要记录某些度量的其他模型。我通常索引像这样的关联列来加速关联加载。 I've heard people talking about joint-indexing this association。这看起来像:

add_index :comments, [:commentable_type, :commentable_id]

But I've also heard counsel against creating indexes of low-cardinality,因为索引的收益并没有抵消维护它的开销。由于我的多态关联的_type一半可能在数百万行中只有4-5个值,所以我倾向于只对多态关联的_id部分进行索引。我可能会使用_id列和一些其他未提及的整数和日期时间列创建一些额外的联合索引,但我也不会在这些索引中包含_type。

这是你会做什么/推荐的?

2 个答案:

答案 0 :(得分:5)

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

但是,您没有在只有几个值的字段上创建索引。索引位于两个字段的组合上,可能具有不同值组合的 lot 。合并字段的索引是一个明智的想法。

答案 1 :(得分:3)

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

add_index :comments, [:commentable_id, :commentable_type]