Mysql数据类型的优化选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql数据类型的优化选择相关的知识,希望对你有一定的参考价值。

整数类型:

Tinyint-8

Smallint-16

Mediumint-24

Int-32

Bigint-64

实数类型(带有小数部分的数字)

Float-4/double-8:浮点

Decimal:精确(只是存储格式,在计算中会转为double类型)

浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。

字符串类型

Varchar:可变长字符串(需要1-2个字节存储字符串长度)

优点:比定长类型节约空间;

缺点:碎片问题。字符串update变长时,一个行的占用空间变长,但是在页内没有更多空间存储,MYISAM将行拆成不同片段存储,InnoDB分裂页使行可以放进页内;

适用:字符串最大长度比平均长度大很多;列的更新很少;

Char:定长字符串(mysql会删除所有末尾空格)

优点:不易产生碎片

适用:存储密码的MD5值;经常变更的数据;

大型数据类型

Blob:二进制

Text:字符

特殊性:mysqlblobtext值当做一个独立的对象处理,当值太大时,innodb在值内存储一个指针,外部存储区域存储实际的值;mysqlblobtext的排序,只对每列的最前max_sort_length进行排序;mysql不能将列的全部长度字符串进行索引,也不能使用这些索引进行排序;

枚举类型ENUM

mysql在存储枚举类型时非常紧凑;

Mysql在内部会将每个值在列表中的位置保存为整数,并且在表的.frm文件中保存“数字-字符串”的映射关系的查找表;

缺点:字符串列表是固定的,添加或删除字符串都需要alter table

优点:可以缩小表的大小;主键减小后,innodb表的非主键索引也会变小;

关联速度:enum列 关联 enum列  >  varchar列 关联 varchar列  >  enum列 关联 varchar

日期时间类型

Datetime8字节;与时区无关;保存大范围的值,从1001年到9999年,精度为秒;

Timestamp(尽量使用):4字节;依赖于时区;保存1970.1.1以来的秒数;列默认为not null

Timestamp的特殊性:如果插入数据时没有指定第一个timestamp列的值,mysql则设置这个值为当前时间;


以上是关于Mysql数据类型的优化选择的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据类型优化—整数类型优化选择

#yyds干货盘点# MySQL性能优化:选择优化的数据类型

Mysql数据类型的优化选择

MySQL之Schema与数据类型优化

高性能mysql总结(一 数据类型优化)

MySQL中的数据类型和schema优化