万丈高楼平地起,如何正确创建表非常重要,
而如何正确建表,在于如何正确选择合适的数据类型,所以今天我们来谈谈这个话题
说明下:因为发现把图表粘贴过来,显示的时候,格式有点乱,所以我采用截图的方式将图表贴到文章中
1,数据类型选择的原则
原则一:数据类型从小出发
通常情况下,应该选择可以正确存储数据的最小数据类型。
最小的数据类型意味占用更小的磁盘,内存和CPU缓存。
但是提醒一点,要正确估算存储的数据的取值范围,后期修改数据类型会是一个非常耗时的过程。
原则二:列避免出现NULL,一般设置为NOT NULL
通常情况下,列的值出现NULL,不利于MySQL做优化
2,数据类型选择详解
2.1 整数类型
说明:
添加unsigned属性表示该字段不允许负数,正数的上限大致可以提高一倍。
比如tinyint unsigned可以存储0~255的范围。而tinyint是-128~127的范围。
有符号和无符号占用空间大小相同,具有相同的性能。
注意事项:
我们通常会见到一些客户端软件,给我们的创建的字段类型设置为int(11),其实,它不会限制值的合法范围,只是规定了MySQL的交互工具(客户端)用来显示字符的个数,对于存储和计算而言,int(1)和int(32)没什么区别
关键点:int(1)和int(32)没什么区别,这个误会,相信很多人都存在
2.2 浮点类型
浮点类型有float(32),double(64)
对于需要精确点计算的,不建议采用这两种类型。
那么对于通常我们的“金额”字段应该采用什么样的类型?
选择一:decimel需要额外的空间和计算开销,
所以应该尽量只对小数进行精准计算时才使用decimel。
选择二:采用整数类型,比如int或者bigint
关键点:对于金额字段,不能采用float或者double,因为精确度不够,可以采用decimel或者bigint
2.3 字符串类型
关键点:要有选择性的选择varchar或者char,定长的情况下,通常推荐使用char
2.4 日期类型
关键点:使用datetime范围更广,而timestamp则比较省空间。