Tag: indexing

MySQL复合索引中的键的高性能排序(WRT Rails多态关联和STI)

以前,我在ActiveRecord中询问了关于多态外键的复合索引的问题 。 我的问题的基础是我的理解,索引应该基于列的基数,并且在Rails的STI类型和多态_type列上通常具有相当低的基数。 接受我的问题的答案是正确的 – 将高基数_id列和低基数_type列编入索引是有价值的,因为它们一起具有高基数 – 我的下一个问题是:你应该如何订购你的化合物索引? [owner_id,owner_type]的索引首先放置具有较高基数的字段,而[owner_type,owner_id]将具有较高基数的字段放置在第二位。 使用前一个键的查询是否比使用后一个键的查询更高效,或者它们是否同样高效? 我问,因为这对我如何为服务STI模型的表订购复合键有特别的影响。 STI Rails查找器几乎总是查询类型列 – 这也是一个通常低基数的列。 因此,比其他索引更频繁地查询类型列。 如果更频繁地查询类型列,那么使用类型前导索引可能是有意义的,因为较少特定的查询可以利用索引的第一部分来产生性能提升。 但是,对于高度特定的查询而言,我不会因为性能的损害而小费。 利用索引的高基数部分。