目录
什么是水平分表?
按行为单位对数据进行拆分(范围法,hash法)。特点:所有的表结构完全相同。用于解决数据量大的存储问题。
什么是垂直分表?
将表按列拆分成2张以上的小表,通过主外键关联获取数据。
为什么要垂直分表?
InnoDB处理引擎
需要了解mysql的InnoDB处理引擎。
行数据称为:row
管理数据基本单位称为页:page;每一页的默认大小:16k
保存页的单位称为区:Extent。
关系:区由连续页组成,页由连续行组成。1024/16=64(即:一个1M的区有64个页)
InnoDB1.0后新特性,压缩页
压缩页:对数据底层进行压缩,使实际大小小于逻辑大小。
在跨页检索数据的过程中,压缩和解压缩的效率低。在表设计时,尽可能在页内多存储行数据,减少跨页检索,增加页内检索。
垂直分页分析
1行数据为1K,1页16K,即1页16条数据,1亿的数据需要625万页
垂直分页后,1行数据为64字节(1K=1024字节),即1页256条数据,1亿的数据需要39万页。分页后的数据根据id等关系进行快速提取。
通过将重要字段单独剥离成小表,让每页容纳更多行数据,页减少后,缩小数据扫描范围,达到提高执行效率的目的。
在没有索引或者索引失效的情况下,全表扫描的效率提高了几十倍
垂直分表条件
1.单表数据达千万
2.字段超20个,且包含vachar,CLOB,BLOB等字段
字段放大小表的依据
小表:数据查询、排序时需要的字段;高频访问的小字段
大表:低频访问字段;大字段
小表
大表