三,mysql schema与数据类型优化

数据类型优化原则:更小的通常更好,简单的更好,少使用null。

整数类型:(whole number 和 real number),whole number可以使用tinyint,smallint,mediumint,int,bigint,分别占用8,16,24,42,64位。real number主要有float和double,支持浮点运算,float 和 double 容易产生误差,decimal存储精确的小数,申明语法为decimal(M,D),M整数位,D小数位。

字符串类型:字符串类型主要有varchar和char类型,varchar用于存储可变长的字符串,char用于存储变长的字符串。varchar需要一到两个字节存储字符串的长度。

blob和text:为存储很大的数据而设计的数据类型,blob采用二进制存储,text采用字符存储。当blob和text太大时,会存储一个指针指向外部的实际数据。

日期和时间类型:dateTime 时间从1001到9999年,封装为(yyyymmddhhmmss)格式,需要8个字节存储,精确到秒。timestamp从1970年开始,,需要4个字节,精确到秒,时区。

bit位存储类型,set类型,位的集合。

schema设计


schema 设计需要避免的问题:太多的列,太多的关联,太多的枚举,变相的枚举。


范式与反范式


范式:数据唯一存储在数据库中,没有冗余,保证一致性。


发范式:数据有冗余,减少多表交叉查询,可以提高查询速度。


缓存表与汇总表


实现实时统计是很昂贵的操作,这需要扫描数据库中大部分数据,通过间隔分时汇总表+小范围的实时减少数据库负载。


物理化视图和计数器表


物理化视图实际通过预先计算并存储到物理磁盘上的表,通过策略刷新和更新。


计数器表:主要通过update set num=num+1,这种会有并发的问题,只能串行执行。也可以存储多行,通过sum进行并行统计。


加快alter table 的速度


mysql执行修改表结构的操作:新建一个新表,将旧表的数据插入到新表中去,然后删除旧表。


对于常见的场景主要有两种方式进行:一,先在一台空闲的服务器上执行alter table,之后与主库进行切换。二,建一个别名的表,之后通过删除与重命名替换旧表。


因为表的结构和属性信息在.frm文件中,可以直接修改.frm文件。