mysql 数据类型优化

一、数据类型选择原则

1、更小的通常更好

更小的数据类型,更快速,因为占用更小的磁盘,CPU,缓存;只要保证你的数据最大值不超过你的数据类型范围即可

2、简单就好

简单的数据类型操作需要更少的CPU周期,整型比字符操作代价更低;例如时间类型用Date,datetime等,不用字符串;还有IP地址用整型等

3、尽量避免NULL(我是禁止NULL)

NULL会使索引失效,NULL很特殊,会使索引统计,和值比较变得复杂;一般不允许保存NULL值

整型数据类型

整型所占空间大小
类型 tinyint smallint mediumint int bigint
长度(单位 bit) 8 16 24 32 64

如果没有负值还可以加上 unsigned 属性,增加存储空间,比如128 如果是tinyint是不能存储的,但是如果这个字段不可能有负数的值,那么我们就只需要tinyint就能存储,而不需要用smallint类型;

实数类型

float  四个字节 32位  double占八个字节 64位;decimal精确数据;float和double都是近似值;如过存储货币的话就必须用decimal保证精确性;

字符串类型

char和varchar

varchar需要1~2个字节去存储字符串长度;长度小于或等于255则用一个字节存储,否则用2个字节存储长度;如果MySQL使用的是ROW_FORMAT = FIXED数据的每一行都会采用定长存储,浪费存储空间;如果存储10个字节的数据char只需要10个字节,vachar则需要11个字节;如果字符串的最大长度远大于平均长度,则使用vachar数据类型可以节约存储空间;列的更新很少,内存碎片就不是什么问题;如果是经常变更的数据,或者是固定长度的数据,char是最好的选择;比如存储MD5加密的密码值

BLOB 和TEXT

这种数据长度的存储,最好将这些数据分离开来,垂直分表,减少查询其他字段数据的消耗

ENUM数据类型

对于只有很少几个常量值得数据类型,可以采用枚举数据类型,节省存储空间;这种枚举在存储时,实际上是一整型存储的;所以如果是用1,2,3作为枚举值,可能会导致混乱;不建议用数字作为枚举值;关联查询时,用枚举类型与字符串char/varchar数据类型联合时,可能会比vachar与vachar联合效率较慢,正是因为存储是用整型类型存储导致的,这样会多一次数据类型转换;

时间类型

TIMESTAMP数据类型比datetime类型更小,占用4个字节



猜你喜欢

转载自blog.csdn.net/QWERDF10010/article/details/80297532