1.一般情况下,应该尽量使用可以正确存储数据的最小数据类型。
2.简单数据类型的操作通常需要更少的cpu周期。比如,整型比字符串操作代价更低,应该使用整型存储IP地址等。
3.尽量避免NULL。可以NULL的列,似的索引,索引统计和值比较都更复杂,可以NULL的列会使用更多的存储空间。但是在已经成型的数据库中,NULL改为NOT NULL带来的性能提升比较小。但是,如果计划在列上建立索引,就应该避免设计成为可以为NULL的列。(InnoDB引擎使用单独的bit存储NULL值,MyISAM不适用)。
4.选择具体类型:很多MySQL的数据类型可以存储相同类型的数据:只是存储长度和范围不一样,允许的精度不同,占用物理空间不同。
如:timestamp和datetime都可以存储相同类型的数据,,但是timestamp只使用datetime一半的存储空间,并且根据时区变化。
5.整数类型不允许负值,大致可以使正数的上限提升一倍,有无符号类型使用相同的存储空间,并具有相同性能。
6.整数计算一般使用64位的bigint整数,32位环境也是如此。
7.对于存储和计算来说,int(1)和int(20)是相同的,只是规定了MySQL的一些交互工具用来显示字符的个数。
8.decimal可以用来存储比bigint还大的整数。MySQL支持精却和不精确的类型。decimal用于存储精确的小数(需要MySQL版本 >= 5.0),支持精确的计算。
9.浮点和decimal都可以指定精度,对于decimal列,可以指定小数点前后所允许的最大位数。这会影响空间的消耗。
MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。例如,decimal(18,9)小数点两边将个存储9个数字,一共使用9个字节:小数点前后的数字各用4个字节,小数点本身占一个字节。
为了精度,建议只指定数据类型,不指定精度。
10.decimal需要额外的空间和计算开销,应该尽量只在对小数进行精确计算 时才使用decimal。但是在数据量比较大的时候,可以使用bigint代替decimal。根据小数的位数乘以相应的倍数即可。