我有一个我希望非常大的指标表。它具有多态关联,因此它可以属于想要记录某些度量的其他模型。我通常索引像这样的关联列来加速关联加载。 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。
这是你会做什么/推荐的?
答案 0 :(得分:5)
最终,在实际数据集上添加索引之前和之后,这值得进行基准测试 - 大小和数据都是真实的。
但是,您没有在只有几个值的字段上创建索引。索引位于两个字段的组合上,可能具有不同值组合的 lot 。合并字段的索引是一个明智的想法。
答案 1 :(得分:3)
最佳做法是在多个字段上创建索引时首先放置最具选择性的字段。由于您只有4-5个commentable_type
值,因此您最好这样做:
add_index :comments, [:commentable_id, :commentable_type]