请看下面的Mysql表: http: //pastebin.com/b0NDSbdz
我对表进行了分区,sent_at
并确保大多数查询都通过了sent_at
。我需要包含sent_at
在所有索引中吗?
你发现任何潜在的冗余索引了吗?
当我sent_at
在索引中包含时,它是否必须是索引声明中的第一个字段?
请看下面的Mysql表: http: //pastebin.com/b0NDSbdz
我对表进行了分区,sent_at
并确保大多数查询都通过了sent_at
。我需要包含sent_at
在所有索引中吗?
你发现任何潜在的冗余索引了吗?
当我sent_at
在索引中包含时,它是否必须是索引声明中的第一个字段?
多个问题,多个答案:
无需“发现”潜在的冗余索引:使用common_schema或Percona Toolkit来查找此类键。但我检查过——不,没有多余的键。
您不必
sent_at
在索引中使用如果这样做,索引中的位置(按分区)无关紧要。
但是没有告诉的一件事是你如何查询你的表。您是否对大多数字段进行相等性检查并对 进行范围检查
sent_at
?在这种情况下最好sent_at
最后索引。如果sent_in
对同一字段进行相等性检查或范围检查,而对其他列进行很少或没有过滤,则sent_in
自行索引,或按顺序首先索引。现在每个分区中有 1 个月的数据;按时间索引它并不是一个坏主意。