同一列上的两个索引

 人忒多 发布于 2023-02-12 12:50

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

以此示例表为例:

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,可以在你的所有表中搜索这样的情况.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有