高性能mysql读书笔记(三)

来源:互联网 发布:阿里云加速器 编辑:程序博客网 时间:2024/05/22 14:12

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