Mysql 具有相同列的两个重复索引
我正在查看数据库中的一个表(我没有创建该表),我看到有两个索引完全相同(我不知道为什么这样做),只是名称不同,这会对表产生任何负面影响吗 以下表为例:Mysql 具有相同列的两个重复索引,mysql,sql,indexing,Mysql,Sql,Indexing,我正在查看数据库中的一个表(我没有创建该表),我看到有两个索引完全相同(我不知道为什么这样做),只是名称不同,这会对表产生任何负面影响吗 以下表为例: 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 us
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)
);
是的,它会有效果 当然,如果使用这两个索引,它们会占用磁盘和内存上的额外空间 但它们也会导致查询优化器在每次选择过程中做更多的工作来计算每个索引的好处。索引越多,需要比较的案例就越多。因此,消除真正冗余的索引是值得的 正如其他人也注意到的,索引是在插入/更新/删除操作期间更新的,因此索引越多,所代表的开销就越大。得到大量使用的索引证明了它们自己的开销是合理的,但是重复索引会占用更多的开销,并且没有额外的好处可以匹配
如果您感兴趣,Percona Toolkit有一个工具可以搜索所有表中的此类案例。是的,它会影响性能。每次您写入新行或更改
用户id
,MySQL都必须写入三次:一次写入表,一次写入用户id\u idx
索引,一次写入用户id\u 2
索引。我会除掉其中一个
在删除额外索引之前,请确保它没有被引用到任何地方。大多数情况下,索引没有按名称提及,但也有例外,例如。更不用说插入/更新/删除时的双索引维护了。