mysql 选择优化的数据类型

  1. 选择最小的数据类型,因为它们占更少的磁盘,内存和CPU缓存;

  2. 选择简单的数据类型,如用整型来存储ip: http://blog.csdn.net/lyd518/article/details/20701099

  3. 避免null,因为null会占用存储空间,null在索引列上会使索引更复杂

整数类型

  1. TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 分别使用8,16,24,32,64 位存储空间;

  2. 选择unsigned属性,可以使正数的上限提高一倍;

  3. 使不使用unsigned属性,跟性能无关;

  4. int(1)和int(10)对存储和计算来说是相同的,只是规定一些mysql交互工具用来限制显示字符的个数;

实数类型

  1. 可以使用DECIMAL存储比BIGINT还大的整数;

  2. CPU不支持DECIMAL直接计算,MYSQL服务器自身实现了DECIMAL的高精度运算,相对而言,CPU直接支持浮点运算,所以浮点运算明显更快;

  3. float占用4个字节,double占用8个字节;

  4. DECIMAL需要额外的空间和计算开销,所以尽量少用它;

  5. DECIMAL可以使用BIGINT代替,把小数乘以数倍存储在BIGINT里面,可以避免浮点存储计算不准确和DECIMAL精度计算代价高的问题;

字符串类型

  1. varchar需要一个或者两个额外的字节记录字符串长度,varchar列的长度小于或等于255个字节需要一个字节,大于255需要两个字节;

  2. varchar 用于存储可变长字符串,它比定长类型更节省空间;

  3. char适合存储很短的字符串,或者所有值都接近同一个长度;

  4. 对于经常变更的数据,char比varchar更好,因为定长的char类型不容易产生碎片;

  5. 对于存储非常短的列,char存储空间比varchar少,如存储“Y”或"N",采用单字节字符集,char(1)占用一个字节;varchar(1)占用两个字节;

  6. 当存储char值时,mysql会删除所有末尾空格,char值会根据需要采用空格进行填充比较;

  7. varchar(5)和varchar(200)存储"hello"的空间开销是一样的。但更长的列会消耗更多的内存,因为mysql通常会分配固定大小的内存块来保存内部值;

BLOB和TEXT类型

  1. BLOB和TEXT分别采用二进制和字符存储;

  2. MYSQL不能将BLOB和TEXT列全部长度字符串进行索引,也不能用这些索引消除排序;

日期和时间类型

  1. MYSQL可以存储的最小时间是秒;

  2. DATETIME能保存大范围的值,从1001年到9999年,精度为秒。它把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,与时区无关,使用8个字节存储;

  3. 默认情况下,MYSQL以一种有顺序,无歧义的格式显示DATETIME值,例如"2014-12-12 12:12:12";

  4. TIMESTAMP 用4个字节存储,和UNIX时间戳相同,它只能表示1970年到2038年,它的显示格式例如"2014-12-12 12:12:12";;

  5. MYSQL提供了FROM_UNIXTIME()函数把UNIX时间戳转换成日期,并提供UNIX_TIMESTAMP()函数把日期转为UNIX时间戳;

  6. TIMESTAMP 依赖于时区;

  7. 当插入或修改记录时,如果TIMESTAMP没有指定值,TIMESTAMP默认会保存当前时间;

  8. TIMESTAMP比DATETIME的空间效率更高,尽量选择TIMESTAMP;

  9. 可以使用BIGINT存储微妙级别的时间戳,或者使用DOUBLE保留秒之后的小数部分;

特殊类型数据

1.IPv4地址经常被人用varchar(15)来存储,但是它32位无符号的整数,小数点将地址分四段只是为了让人容易阅读,所以整型来存储它,MYSQL用INET_ATON() 和INET_NTOA()用于这两种表示转换;

原文地址:https://www.cnblogs.com/lixiuyuan999/p/6372489.html