Innoadb引擎存储数据
Row---->Page (16kb). ---->分区extent. ---->压缩分区segment
数据分散到不同page,意味着更多的磁盘io 和解压缩数据,性能低
通过将重要字段单独剥离出一张小表,让每一页能够容纳更多的行,进而缩小数据扫描的范围,达到提高执行效率的目的。
举例:假设1亿条数据
- 不做垂直切分,1K大小的行需要625万页
- 做了垂直切分,小表64字节行,存储小表需要39万页
每一个page 大小16kb,单行大小过大,数据会分散到多个page,需要更多磁盘io
减少单行字段即减小单行数据量,更多行记录的数据都集中到一个page,搜索时数据集中
垂直拆分原则:
- 单表数据量未来可能千万
- 字段超过20个,且包含了超长的Varchar,CLOB BLOB等字段
具体实践
-
不拆分:数据查询、排序时需要的字段,如分类编号、商户id.品牌编号、逻辑删除标志位等
高频访问的小字段,如商品名称、子标题、价格、厂商基本等 -
拆分字段:低频访问字段:配送信息、售后声明、最后更新时间等大字段:商品图文详情、图片BLOB,JSON元数据等