三,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文件。