MySQL7-Schema设计的性能优化

高效的模型设计

适度冗余- 让Query尽量减少Join

大字段垂直分拆- summary 表优化

大表水平分拆- 基于类型的分拆优化

统计表- 准实时优化

合适的数据类型

优化数据类型提高性能的主要原理在于以下几个方面:

①通过选用更“小”的数据类型减少存储空间,使查询相同数据需要的IO资源降低。

②通过合适的数据类型加速数据的比较。

数字日期类型

存放长度基本固定的一些数据类型的存储长度和取值范围:

字符存储类型

CHAR[(M)]类型属于静态长度类型,存放长度完全以字符数来计算,所以最终的存储长度是基于字符集的,如latin1 则最大存储长度为255 字节,但是如果使用gbk 则最大存储长度为510 字节。CHAR 类型的存储特点是不管我们实际存放多长数据,在数据库中都会存放M 个字符,不够的通过空格补上,M 默认为1。虽然CHAR 会通过空格补齐存放的空间,但是在访问数据的时候,MySQL 会忽略最后的所有空格,所以如果我们的实际数据中如果在最后确实需要空格,则不能使用CHAR 类型来存放。在MySQL5.0.3 之前的版本中,如果我们定义CHAR 的时候M 值超过255,MySQL 会自动将CHAR 类型进行转换为可以存入对应数据量的TEXT 类型, 如CHAR(1000)会自动转换为TEXT , CHAR(10000)则会转为MEDIUMTEXT。而从MySQL5.0.3 开始,所有超过255 的定义MySQL 都会直接拒绝并给出错误信息,不再自动转换。

VARCHAR[(M)]属于动态存储长度类型,仅存占用实际存储数据的长度。其存放的最大长度与MySQL版本有关,在5.0.3 之前的版本VARCHAR 以字符数控制最存储的最大长度,最大只能存放255 个字符,占用存储空间的实际大小与字符集有关。但是从5.0.3 开始,VARCHAR 的最大存储限制已经更改为字节数限制了,扩展到可以存放65535 bytes 的数据,不同的字符集可能存放的字符数并不一样。也就是说,在MySQL5.0.3 之前的版本,M 所代表的是字符数,而从5.0.3 版本开始,M 的代表意思已经是字节数了。VARCHAR 的存储特点是不管我们设定M 为多大的值,真正占用的存储空间都只有我们所存入的实际数据的大小,和CHAR 不同的是VARCHAR 会保留我们存入数据最后的空格,也就是说我们存入是什么样,MySQL返回给我们的也会是什么样。在VARCHAR 类型字段的数据中,MySQL 会在每个VARCHAR 数据中使用1 个或者2 个字节用来存放VARCHAR 数据的实际长度,当我们的实际数据在255 字节之内的时候,会使用1 字节来存放实际长度,而大于255 字节的时候,则需要使用2 字节来存放。

TINYTEXT,TEXT,MEDIUMTEXT 和LONGTEXT 这四种类型同属于一种存储方式,都是动态存储长度类型,不同的仅仅是最大长度的限制。四种类型的定义都是通过最大字符数来限制,但是他们的字符数限制实际上是可以理解为字节数限制的,因为当我们使用多字节字符集的时候,实际能存放的字符数并没最大字符数那么多,而是以单字节字符来计算的字符数。此外,由于是动态存储长度类型,所以和VARCHAR 一样,每个字段数据之前都需要一个存放实际长度的空间。TINYTEXT 需要1 个字节来存放,TEXT需要2 个字节,MEDIUMTEXT 和LONGTEXT 则分别需要3 个和4 个字节来存放实际数据长度。实际上,出了MySQL 内嵌的最大长度限制之外, 他们还受到客户端与服务器端的网络通信缓冲区最大值(max_allowed_packet)的限制。

其他常用类型

 

猜你喜欢

转载自blog.csdn.net/attack_breast/article/details/84526153