小编典典

具有相同列的两个重复索引

sql

我正在查看数据库中的一个表(我没有创建该表),我发现有两个完全相同的索引(我不知道为什么这样做)只是命名不同,这可以对桌子有负面影响吗?

拿这个例子表:

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)
);

阅读 171

收藏
2021-03-23

共1个答案

小编典典

是的,它可以起作用。

当然,如果使用这两个索引,它们会占用磁盘和内存的额外空间。

但是,它们还会使查询优化器做更多的工作来计算每个SELECT期间每个索引的收益。您拥有的索引越多,需要比较的案例就越多。因此,消除真正的冗余索引是有回报的。

正如其他人也指出的那样,索引是在INSERT / UPDATE /
DELETE操作期间更新的,因此拥有的索引越多,表示的开销就越大。经常使用的索引证明了它们自己的开销是合理的,但是重复的索引会占用更多的开销,而没有其他好处可以匹配。

如果您有兴趣,Percona Toolkit拥有一个工具pt-duplicate-key-
checker
,它可以在您的所有表中搜索类似的情况。

2021-03-23