重点: 通过将重要字段单独剥离出一张小表,让每一页能够容纳更多的行,进而缩小数据扫描的范围,达到提高执行效率的目的。
1.水平分表与垂直分表
1.1 水平分表
之前学习的对数据库分片的范围法与HASH法就是水平分表
1.2 垂直分表
将一张大表按照“列”拆分为2张以上的小表,表与表之间通过外键来连接。(公司严格要求使用逻辑外键)
2.垂直分表的底层原理
在进行分表后,sql语句变得复杂,但是我们为什么依旧要这样做?
#调整前
SELECT * FROM 用户表 WHERE 用户名='吉吉';
#调整后
SELECT * FROM 用户信息基础表 a,用户信息详情表 b WHERE a.用户id=b.用户id and a.用户名='吉吉';
我们只需要知道:
- 不做垂直切分,1K大小的行需要625万页
- 做了垂直切分,小表64字节/行,存储小表需要39万页
- 通过将重要字段单独剥离出一张小表,让每一页能够容纳更多的行,进而缩小数据扫描的范围,达到提高执行效率的目的。
3.垂直分表的依据
3.1 时候必须考虑垂直分表?
单表数据量未来可能千万
字段超过20个,且包含了超长的Varchar、CLOB、BLOB等字段
3.2 参考:放入小表的字段
数据查询、排序时需要的字段,如分类编号、商户id、品牌编号、逻辑删除标志位等
高频访问的小字段,如商品名称、子标题、价格、厂商基本等
3.3 参考:放入大表的字段
低频访问字段:配送信息、售后声明、最后更新时间等
大字段:商品图文详情、图片BLOB、JSON元数据等