本文主要介绍MySQL的字段。
首先,字段类型分为以下几大类:数值型、日期时间型、字符串型、复合类型
先插入一个换算:1字节(byte)(B)=8bit(位)(b) 1M=1024B 1G=1024M 1T=1024G
数值型:
整形:
注意事项:
以INT为例,int(11) 后面的这个数字近表示最大显示长度,并不是指最大存储数值。其他类似
浮点型:
注意事项:
1、双进度占用存储资源是单精度的一倍。一般对精度要求高才用double。否则为了节约资源。我们都用float来代替小数。
2、金钱相关不适用以上两种,使用 decimal 。这个字段长度在现在市面上运行版本(5.+) 值,
如DECIMAL(5,2) :- 9 9 9 . 9 9,9999.99 占用 7个字节。
所占字节长度:DECIMAL(M, D) 为 M+2个字节
字符型:
注意事项:
1、char(5),varchar(5) 都能存储5个字符,单varchar要比char多占用一个字节,多出来一位存储字符串长度
2、char会根据定义长度分配空间,并剔除末尾空格
3、更新操作,字符串变长,varchar空间占用会变多,MyISAM将行拆开不同片段处理,而InnoDB分裂页使行可以存在业内,容易产生碎片,而char定长,不容易产生碎片
4、字符串长短差异较大时使用varchar 如果长度差不多或者相同char
5、varchar能存储255字符,超长的字符串需使用text;
6、查询速度 char>varchar>text
7、char(10),varchar(10)等括号内的数字在MySQL5.0.3后表示字符数,而不是字节数
8、varchar、text在MySQL5.0.3以后占用内存空间最大都是65535字节,
9、varchar、char 可以设置默认值,text没有默认值
时间日期格式
1、timestamp超出范围的值无法设置。
2、实际工作中我基本上不用以上字段,基本上会使用时间戳,存储int字段中。整体下来int性能相对较好一些(实际与存储引擎等均有关系,具体可创建表录入百万数据设置不同字段类型查询比较,我测试int整体下来相对好一点,仅个人意见)。
表设计注意事项:
1、表名、字段名尽量简明释义,注意添加注释
2、尽可能的设置自增主键
3、实现具体逻辑是尽量不要使用存储过程
4、字段类型为枚举或者布尔值是尽量使用tinyint
5、尽量将索引字段值设置为非空,null 会导致索引失效
6、能用到整形尽量用整形,能用短字符尽量用短字符,能用char尽量用char
7、text尽量不要使用
8、IP信息需要存储时尽量转成整形存int
其他信息后续如果想起来再继续补充