天天看点

mysql运维 读书笔记_Mysql_读书笔记

mysql存储时间有两种类型:datetime和timestamp。分别说一下两者的区别。

datetime,以8字节存储时间,理论上可以从0000年存储到9999年。并且没有时区的概念,它存储的就是一个时间点的概念。

timestamp和datetime最主要的不同就是,它是以4个字节存储,由1970年开始,计算到目前的秒数,理论上的最大值是2038年。好处就是存储的空间更少,还有一个主要的区别是:timestamp跟系统的时区相关。

ENUM和SET,枚举和集合。枚举表示一个定义的集合中的任一个值,集合表示一个定义的集合中的一个或多个值。区别在于ENUM并不会同时出现两种情况,SET会。需要特别说明的是,不要滥用ENUM,在定义的集合较大时,并不适合适应枚举。还有就是如果,定义的集合为{true,false}时,可以直接使用bool值。

标示符,标示列会用于和其他列进行比较。可以用作其他表的外键,一般会选择跟关联表对应列相同的数据类型。一旦选择好了标示符,就要确保关联表的其他数据都使用相同的类型,混用标示符会造成不可预知的后果,就算表面上没有问题,但是隐式操作时也可能会造成性能问题。一般建议使用整数作为标示符,原因是因为消耗小,速度快,并且支持AUTO-INCREMENT。

接下来说一下mysql的数据表设计,其实没必要完全遵循所谓的规则,对于实际应用场景应该从实际出发。范式和反范式各自有他们的优缺点。

范式表,一般较小,数据重复度比较低。更少使用distinct和group by。因此操作单个表速度更快。

缺点就是因为表结构太简单,如果需要复杂数据就不可避免的要关联。关联查询是个比较痛苦的点。

再介绍一个数据表设计的陷阱:就是不要有太多的列。和行缓存有关系,说是服务器层和存储引擎通过行缓存copy数据,然后服务器将行缓存数据解析成列,过多的列对系统的消耗极大。这里的过多是指几百上千列。

还有,避免过多的关联,最多不可以超过61个关联。

写的比较凌乱,因为就是想到什么写什么,等这一章,看完,会结合这几期读书比较,完整的梳理一遍,写一则章节总结。