为什么要垂直分表

问题

在以前,一张核心表的字段可能有上百个字段,这种肯定是有问题的,至于什么问题,后面分析

什么是垂直分表

垂直分表则是将一张大表按“列”拆分为两张以上的小标,通过主外键关联来获取数据。

举例

这是一张商品表拆分前与拆分后

拆分后的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/为什么要垂直分表/
Author
Posted on
September 26, 2023
Licensed under