数据类型优化

背景

Mysql支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。选择数据类型的基本原则:

  1. 更小的通常更好,一般情况下,应该尽量使用可以正确存储数据的最小数据类型。更小的数据类型通常更快,因为它们占用更少的磁盘,内存,和cpu缓存,并且处理时需要的CPU周期也更少。但是要确保没有低估需要存储值得范围,因为在schema中的多个地方增加数据类型的范围是一个非常耗时和痛苦的操作。
  2. 简单就好,简单数据类型的操作通常需要更少的CPU周期。例如整型比字符串操作代价更低,因为字符集和校对规则使字符比整型比较更复杂。
  3. 尽量避免null,如果查询中包含可为null的列,对mysql来说更难优化,因为可为null的列使的索引、索引统计和值比较都更复杂。

整数类型

TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT.分别占用16,24,32,64位存储空间。它们可以存储的值的范围从-2的(n-1)次方到2的(N-1)次方-1,其中N是存储空间的位数。整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以使正整数的上限提高一倍。

实数类型

实数是带有小数部分的数字。然而,它们不只是为了存储小数部分;也可以使用DECIMAL存储比BIGINT还大的整数。Mysql既支持精确类型,也支持不精确类型。

字符串类型

mysql支持多种字符串类型,每种类型还有很多变种。Varchar和char类型是两种最主要的字符串类型。

varchar

varchar:用于存储可变长的字符串,是最常见的字符串数据类型。它比定长类型更节省空间,因为它仅使用必要的空间。但是Mysql表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间。同时它需要使用1或2个额外的字节记录字符串的长度,如果列的最大长度小于或等于255字节,则使用1个字节表示,否则使用2个字节。如varchar(10)需要11个字节的存储空间。varchar(1000)的列则需要1002个字节,因为需要2个字节存储长度信息。
varchar节省了存储空间,所以对性能也有帮助。但是,由于行是变长的,在update时可能使行变得比原来更长,这就导致需要额外的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下,不同的存储引擎的处理方式是不一样的。MyISam会将行拆成不同的片段存储,InnoDB则需要分裂页来使行可以放进页内。

char

先通过一个例子来了解下:
这里写图片描述
从图中可以看出string3的末尾的空格被截断了。
这里写图片描述
从图中可以看出使用varchar(10)字段存储相同的值,string3结尾的空格没有被截断。

Blob和Text类型

都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。
实际上,它们分别属于两组不同的数据类型家族:字符类型是TINYTEXT,SMALLTEXT,TEXT,MEDIUMTEXT,LONGTEXT;对应的二进制类型TINYBLOB,SMALLBLOB,BLOB,MEDIUMBLOB,LONGBLOB。BLOB是SMALLBLOB的同义词,TEXT是SMALLTEXT的同义词。mysql把每个blob和text值当作一个独立的对象处理。当blob和text值太大时,InnoDB会使用专门的“外部”存储区域来进行存储,此时每个值在行内需要1~4个字节存储一个指针,然后在外存储区域存储实际的值。Blob和text不同是blob存储的是二进制数据。没有排序规则或字符集,而text类型有字符集合排序规则。

ENUM代替字符串类型

有时候可以使用枚举代替常用的字符串类型。枚举可以吧一些不重复的字符串存储成一个预定义的集合。

日期和时间类型

DATATIME

这个类型能保存大范围的值,从1001年到9999年,精确度为秒。他把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,与时区无关。使用8个字节的存储空间。默认情况下,mysql以一种可排序的、无歧义的格式显示DAETIME值,例如“2008-01-16 22:37:08“。这是ansi标准定义的日期和时间表示方法。

TIMESTAMP

类型保存了从1970年1月1日1日午夜以来的秒数,它和unix时间戳相同。它只使用4个字节的存储空间,因此它的范围比datatime小的多:只能表示从1970年到2038年。它显示的值也依赖于时区。

位数据类型

bit

可以使用bit列在一列中存储一个或多个true/false值。bit(1)定义一个包含单个位的字段。bit(2)存储2个位,一次类推。最大长度是64个位。它的行因存储引擎而异。

选择标识符

特殊类型数据

猜你喜欢

转载自blog.csdn.net/qq_18377515/article/details/80904336