mysql 数据类型优化

1、数据类型选择原则

一、更小的一般更好缓存

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

二、简单就好spa

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

三、尽可能避免NULL(我是禁止NULL)内存

NULL会使索引失效,NULL很特殊,会使索引统计,和值比较变得复杂;通常不容许保存NULL值
ci

整型数据类型字符串

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

若是没有负值还能够加上 unsigned 属性,增长存储空间,好比128 若是是tinyint是不能存储的,可是若是这个字段不可能有负数的值,那么咱们就只须要tinyint就能存储,而不须要用smallint类型;it

实数类型io

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

字符串类型

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个字节