一.选择优化的数据类型
- 更小的通常更好: 在允许的情况下,应该尽量使用可以正确存储数据的最小数据类型,因为占用更少的磁盘,内存和CPU缓存,处理周期短, 例如只要存储0~200,tinyint unsigned 更好
- 简单就好: 例如整型比字符型操作代价更低,因为字符集和校对规则(排序规则)使字符串比较比整型比较更复杂.该使用MySql的内建类型(date,time,datetime)时,不要使用字符串存储
- 尽量避免使用Null: 通常情况下,最好指定列为 not null,除非真的需要存储null值,因为null的列使得索引,索引统计和值比较都更为复杂;可为null的列会使用更多的存储空间. 调优时,将可为null的列改为not null,带来的性能提升比较小,但是如果计划在列上建索引,就应该尽量避免设计成可为null的列
注: InnoDB使用单独的位bit存储null值,对于稀疏数据(很多值为null,只有少数列非null)有很好的空间效率,但不适用与MyIASM
二.选择具体的数据类型
1.整数类型
整数类型可选择** unsigned **属性,表示不允许负值,大致可以使整数的上限提高一倍.例如: tinyint 存储范围 -128 ~ 127;而 tinyint unsigned 的范围为:0~255- TInyint: 8位存储空间,存储的范围从-2(8-1) 到2(8-1)
- smallint: 16位存储空间,存储的范围从-2(16-1) 到2(16-1)
- mediumint: 24位存储空间,存储的范围从-2(24-1) 到2(24-1)
- int: 32位存储空间,存储的范围从-2(32-1) 到2(32-1)
- bigint: 64位存储空间,存储的范围从-2(64-1) 到2(64-1)
注: 上述选择决定MySql怎么在内存和磁盘中保存数据,然而整数计算一般使用64位的bigint整数,即使32位环境也是