MySQL数据库的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。数据的存储和存储引擎有关,不同的存储引擎存储相同类型的数据时可能方式不一样。
一般把握以下几点:
更小的通常更好
一般情况下,应该尽可能使用正确存储数据的最小数据类型。更小的数据类型通常更快。
简单就好
简单的数据类型的操作通常需要更少的CPU周期。
尽量避免使用null,通常情况下最好指定列为NOT NULL。
可为null的列使得索引、索引统计和值比较都更复杂。
可为null的列会使用更多的存储空间,在MySQL里面做特殊处理。
数据类型分析
整数
MySQL提供了几种整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。分别使用8、16、24、32、64位存储空间。
整数类型有可选的UNSIGNED属性,表示不允许负值(这样可以扩大正数的范围)。
对于存储和计算来说INT(11) 和INT(20)是相同的,只是规定了MySQL的一些交互工具用来显示的字符的个数。
实数
MySQL提供了几种实数类型:FLOAT、DOUBLE、DECIMAL。FLOAT、DOUBLE分别使用32、64位存储空间。DECIMAL在MySQL 5.0和更高版本中允许最多65个数字。
DECIMAL可以存放比BIGINT更大的数字,一般尽量在对小鼠进行精确运算时才使用。
MySQL提供了几种字符串类型:VARCHAR、CHAR。VARCHAR用来存储可变长度的字符串。
VARCHAR比定长字符串更节省空间,因为它仅使用必要的空间,所以对性能也有帮助。但在update时需要比原来更长,这就导致额外的工作。
VARCHAR最适合字符串列的最大长度比平均长度大很多,列的更新很少。
CHAR类型是定长的。MySQL在哪个是根据定义的字符串长度分配足够的空间。
存储char值是,MySQL会删除所有的末尾空格。
char适合存放很短的字符串,所有的长度都接近一个长度的数据,如MD5值。
慷慨是不明智的。VARCHAR(5)和VARCHAR(200)存储‘hello’的空间开销是一样的。但是更长的列会消耗更多的内存。
BOLB和TEXT都是为存放大数据而设计的字符串数据类型。分别采用二进制和字符方式存储。
字符类型是:TINYTEXT、SMALLTEXT、TEXT、MEDIUMTEXT、LONGTEXT,对应的二进制类型是:TINYBLOB、SMALLBLOB、BLOB、MEDIUMBLOB、LONGBLOB。BLOB是SMALLBLOB的同义词、TEXT是SMALLTEXT的同义词。
有时候可以用枚举列代替常用的字符串类型。没剧烈可以把一些不重复字符串存储成一个预定义的集合。
DATETIME存放的时ANSI标准定义的日期和时间表示方法,精确到秒。
TIMSTAMP保存了从1970年1月1日午夜以来的秒数,它和UNIX时间戳相同。
除了特殊行为之外,通常也应该尽量使用TIMESTAMP,因为它比DATETIME空间效率更高。
本文出自 “底小高大” 博客,请务必保留此出处http://3157689.blog.51cto.com/3147689/1697394
原文地址:http://3157689.blog.51cto.com/3147689/1697394