我正在查看数据库中的一个表(我没有创建该表),我发现有两个完全相同的索引(我不知道为什么这样做)只是命名不同,这可以对桌子有负面影响吗?
拿这个例子表:
create table mytable( mytable_id int unsigned primary key auto_increment, user_id int unsigned, amount decimal(12,2), index user_id_idx(user_id), index user_id_2(user_id) );
是的,它可以起作用。
当然,如果使用这两个索引,它们会占用磁盘和内存的额外空间。
但是,它们还会使查询优化器做更多的工作来计算每个SELECT期间每个索引的收益。您拥有的索引越多,需要比较的案例就越多。因此,消除真正的冗余索引是有回报的。
正如其他人也指出的那样,索引是在INSERT / UPDATE / DELETE操作期间更新的,因此拥有的索引越多,表示的开销就越大。经常使用的索引证明了它们自己的开销是合理的,但是重复的索引会占用更多的开销,而没有其他好处可以匹配。
如果您有兴趣,Percona Toolkit拥有一个工具pt-duplicate-key- checker,它可以在您的所有表中搜索类似的情况。