我正在查看数据库中的一个表(我没有制作表),我看到有两个完全相同的索引(我不知道为什么这样做)只是命名不同,这可以对桌子有任何负面影响?
以此示例表为例:
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) );
Bill Karwin.. 15
是的,它会产生影响.
当然,如果使用这两个索引,则在磁盘上以及内存中占用额外空间.
但是它们也会导致查询优化器在每个SELECT期间做更多的工作来计算每个索引的好处.您拥有的索引越多,它必须比较的情况就越多.因此,消除真正的冗余索引是值得的.
正如其他人也注意到的那样,索引在INSERT/UPDATE/DELETE操作期间更新,因此您拥有的索引越多,它所代表的开销就越多.获得大量使用的索引证明了它们自己的开销,但重复的索引需要更多的开销而没有额外的好处来匹配.
如果你有兴趣,Percona Toolkit有一个工具pt-duplicate-key-checker,可以在你的所有表中搜索这样的情况.