1 使用可以正确存储数据(不会超过范围)的最小的数据类型
2 整形优于字符串,使用MySQL内建的类型存储日期时间,而不是字符串。使用整形存ip。
3 避免NULL,NULL列建立索引,需要消耗更多的空间。但是Innodb存储引擎的稀疏索引NULL较多反而更高效,InnoDB 使用bit存储NULL,空间效率高
整数类型:
tinyint smallint mediumint int bigint
8 16 24 32 64
可选择unsigned属性
有符号无符号数占用的存储空间以及性能一样,仅存储范围不同。
为int(11)指定宽度为11 对存储与计算无影响,仅客户端展示数据会限制范围,不建议使用。
只有在需要对小数进行精确计算的情况下使用Decimal。如财务数据等
使用Decimal会带来空间及计算开销
可以用BigInteger取代。如精度保留小数点后2位。则每个数字乘以100后再存入BigInteger中
VarChar
存储可变长的字符串,仅使用必要的空间,因此比定长串Char更节省空间。
会使用额外的1个或2个字节记录字符串的长度
VarChar 适用于 字符串列最大长度比平均长度大很多,且修改不频繁的场景下(修改频繁会有碎片问题)
char适用于定长的值,变更频繁时char不会有碎片问题。
但char会有空格截断问题。
使用varchar时,仅分配真正需要的空间。