技术译文 | 为什么 MySQL 添加一个简单索引后表大小增长远超预期?

作者:Przemysław Malkowski

本文和封面来源:https://www.percona.com/,爱可生开源社区翻译。

本文约 2800 字,预计阅读需要 7 分钟。

仅保留必要的索引以降低写入性能和磁盘空间开销是一种众所周知的好习惯。MySQL 官方文档中简要提到了这个简单的规则[1]

然而,在某些情况下,添加新索引的开销可能远远超出预期!最近,我一直在分析一个这样的客户案例,它鼓励我分享这样的例子,因为它肯定会让许多开发人员甚至 DBA 感到惊讶!

让我们以这个非常具体的表为例,它只有三列。主键是在其中两个上创建的:

mysql > show create table t1G<br>*************************** 1. row ***************************<br>       Table: t1<br>Create Table: CREATE TABLE `t1` (<br>  `a` varchar(32) NOT NULL,<br>  `b` int unsigned NOT NULL,<br>  `c` varchar(32) NOT NULL,<br>  PRIMARY KEY (`a`,`c`)<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci<br>1 row in set (0.00 sec)<br>