MYSQL数据类型优化

141 阅读3分钟

MYSQL目前的数据类型

数字类型

时间日期类型

字符串类型

如何进行数据类型优化

宗旨:MYSQL的数据类型很多,但有几点原则对于选择是非常关键的

  • 更小的通常更好 :更小的数据类型一般更快,占用的存储,cpu等资源少
  • 简单就好 :采用最合适的类型,例如时间存储使用MYSQL自带的时间类型,而不是字符串类型
  • 尽量避免使用NULL :null值对索引的使用比较不友好,在设定为索引的列上,最好设为 NOT NULL

整数类型

整数类型有TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 5种类型。

  • 这5种类型都可以存储正,负整数,并通过UNSIGNED属性来选择。选择UNSIGNED后,大致可以使正数的存储范围提高一倍,因为存储空间是固定好的。
  • MYSQL可以为整数类型指定宽度。比如INT(1)和INT(20),其存储的值是一样的,只是在交互工具上显示出不同的效果而已。
  • 整数计算中,MYSQL默认转化为BIGINT

实数类型

实数类型有float(单精度浮点型),double(双精度浮点型),decimal(定点型) 3种类型

  • 3种实数类型均可以指定精度,指定方式为类型名称后加(M,D),其中M代表总长度,D代表小数点后的长度。
  • 3种类型不指定精度的情况下,float和double按照实际精度存储,decimal则默认整数10,小数0
  • 浮点类型的运算会造成误差,所以在MYSQL中进行精确的小数计算的话,应该是有decimal,或者交给上层应用解决

字符串类型

CHAR 和 VARCHAR

  • 表示方式均为char(M)或varchar(M),其中M表示最大存储长度
  • char是定长,varchar不定长表现在插入一个长度小于M的字符串a,char(M)的还是占用M个字符,而varchar(M)则只占用a个长度的字符、
  • 字符串是定长的情况下,char比varchar好。varchar需要额外的1-2个字符来记录字符串的长度
  • 对于经常变更的短数据或定长数据,使用char更好
  • char在存储的时候会将右侧空格进行剔除,保留左侧空格。varchar在存储的时候保留所有空格,不进行任何删除。varchar和char在查询的时候都只会根据where条件中的左侧空格进行判断,右侧末尾的空格会忽略

BLOB 和 TEXT

  • 这两个类型,均是为了存储大字符量的
  • BLOB采用二进制方式存储 , TEXT 采用字符串形式存储

时间日期类型

DATE,TIME,YEAR

-DATE : 日期 YYYY-MM-DD -TIME : 时间 HH:mm:ss -YEAR : 年份 YYYY

DATETIME 和 TIMESTAMP

  • 这两者都是日期,时间混合类型
  • DATETIME(1001到9999,8字节存储),TIMSTAMP(1970-2038,4字节存储)
  • DATETIME不会根据时区变化,TIMESTAMP会根据时区变化
  • TIMESTAMP 在插入后有特殊的属性,NULL时为最新时间

标识符的选择

  • 整数类型是作为标识符最好的选择,并且可以使用auto_increment
  • ENUM he SET ,这两种类型通常是不好的选择