为什么要垂直分表
问题

在以前,一张核心表的字段可能有上百个字段,这种肯定是有问题的,至于什么问题,后面分析
什么是垂直分表
垂直分表则是将一张大表按“列”拆分为两张以上的小标,通过主外键关联来获取数据。
举例
这是一张商品表拆分前与拆分后

拆分后的SQL变换

拆表原因
先来看我们的InnoDB的存储结构

我们每一页(Page)默认的大小为16K,保存我们 页的叫做区(Extent)(1M),我们一个区能够存储64个页,我们的每一页存储行数据,我们的InnoDB 1.0版本之后,引入了一个压缩页,这比之前可以占用更小的空间,有压缩就有解压缩,在我们的跨页检索中,压缩和解压缩是效率不高的,所以我们的每一页尽可能多的存储一些行数据,这就是我们的理论支撑。
对比

假如有一亿条数据,每一条数据占用1K大小,那么此时需要625W页,做了垂直切分,小标64字节/行,存储小标需要39W页。

假如上面sql中的商品标题因为某种原因没有走索引,那么需要625W页全部扫描,那么我们拆表之后39W页效率就比之前提升了16倍
总结
通过将重要字段单独剥离出一张小表,让每一页能够容纳更多的行,进而缩小数据扫描的范围,达到提高执行效率的目的
触发垂直分表的条件
单表数据量未来可能千万、字段超过20个,并且包含了超长的Varchar、CLOB、BLOB等字段
小标的字段

大表的字段

为什么要垂直分表
http://example.com/2023/09/26/为什么要垂直分表/