MySQL添加简单索引,表容量增长超预期的场景
数据库设计其实很重要,除了常规的规则,一些细节方面的设计,如果存在偏差,特定场景下,就可能对系统的运行性能产生影响。技术社群的这篇文章《技术译文 | 为什么 MySQL 添加一个简单索引后表大小增长远超预期?》就介绍了一个增加简单索引导致表容量增长远超预期的场景,值得学习和借鉴,在数据库设计时,需要格外关注。
仅保留必要的索引以降低写入性能和磁盘空间开销是一种众所周知的好习惯。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>