1.水平分表 是为了解决单表数据过大引起效率问题,可以通过HASH、范围、取模邓手段拆分,将大表化小的手段 2.垂直分表 是将宽表变成几个窄表的手段,几个拆分前后的数据记录数未
1.水平分表
是为了解决单表数据过大引起效率问题,可以通过HASH、范围、取模邓手段拆分,将大表化小的手段
2.垂直分表
是将宽表变成几个窄表的手段,几个拆分前后的数据记录数未改变。通过将少量的重要字段剥离到窄表,让每个页容纳更多的行,减少跨页检索,减少磁盘扫描范围,达到高效的目的。
2.1 何时进行垂直拆分
- 单标数据总量可能过千万
- 字段超过20个
- 包含超长varchar、text、clob、blob等占用空间的类型字段
2.2 那些字段适合放在小表
- 数据查询条件、排序用到字段:商品ID、商户ID、分类编号、品牌编号、逻辑删除字段
- 高频访问的字段:商品名、子标题、厂家信息、价格
2.3 哪些字段适合放在大表
- 低频访问字段:配送信息、售后申明、最后更新时间
- 大字段:图文详情、图片Base64\Json元数据
3.InnoDB 管理数据的机制
Row ->page(16K)->extent->segment->table space
- row: 行 就是一条记录
- page: 页,磁盘存储、固定大小为16KB,根据行数据不同大小,存储若干连续的行
- extent: 区,固定大小为1MB ,也就是一个区只能保存64个连续的页
- segment:段
- table space: 表空间
innodb1.0后提供了压缩页的技术,可以让每页物理上存储更多的逻辑数据。跨页检索数据时的解压缩效率不算高,所以做表设计时,要尽量的在一个页中存储更多的行数据,来减少跨页检索的次数,来提高数据检索效率。
垂直拆分前:每行占1KB,需要625万页来存储。 垂直拆分后:每行占64B,只需要39万页来存储。 查询时需要检索的数据页数相差16倍。