首先我们来谈一谈冗余索引会带来的问题:
1.过多的索引降低了写入数据的效率,因为在写入数据时需要更新索引,这样需要花很多的时间。
2.太多的索引增加了查询优化器的选择时间。
3.不合理的使用索引,会大幅占用磁盘空间,因为索引也是需要占用磁盘空间来进行存储的,有时候会存在索引比表数据占用的存储空间还要大的情况。
怎么判断哪些索引是冗余索引呢?系统在线上运行一段时候后,可以使用这条sql语句来查看索引的使用情况,0代表索引从来没有被使用过,可以考虑进行删除。
SELECT
object_type,object_schema,object_name,index_name,
count_read,count_fetch,count_insert,
count_update,count_delete
FROM
performance_schema.table_io_waits_summary_by_index_usage
ORDER BY
sum_timer_wait desc;
最后再介绍一个删除冗余索引的小工具,pt-duplicate-key-checker是percona-toolkit工具包中的实用组件,使用起来很简单,执行以下命令,红色箭头部分就是删除冗余索引的优化建议