我们知道水平拆分可以防止单表数据量过大,那垂直拆分呢?
原因分析
因为数据库的行是存放在页Page里面的,但是一个Page的大小是16KB,假设我们的数据库表字段超级多或则字段很大,一行数据有1k,那么一Page只能存16行,假设表有1亿条数据,那么需要625万页,如果是全表扫描,那么可以想象625万页的扫描有多恐怖。
假设我们进行垂直拆分,将大字段独立分离出来,小字段一个表,假设小字段只有0.1k,那么就只需要62.5万页,效率高了10倍。
垂直拆分的依据
1、单表数据量未来可能千万
2、字段超过20个,且包含了超长的Varchar,CLOB,BlOB等字段
那些适合放在小表中
1、数据查询,排序时需要的字段,如分类编号,商户ID,品牌编号,逻辑删除标志位等
2、高频访问的小字段,如商品名称,子标题,价格,厂商等
那些适合放在大表中
1、低频访问字段:配送信息,售后声明,最后更新时间等
2、大字段:商品图文详情,图片BLOB,JSON元数据等。