字段设计规范

1、字段类型优先级
解读:
(1)整型 > date,time > enum,char > varchar > blob
(2)整型: 定长,没有国家/地区之分,没有字符集的差异
(3)char 定长,考虑字符集和(排序)校对集
(4)varchar,不定长要考虑字符集的转换与排序时的校对集,速度慢.
(5)text/Blob 无法使用内存临时表
(6)日期data/time用 int unsigned not null

2、合适的字符存储长度
解读:不但节约数据库表空间、节约索引存储,更重要的是提升检索速度
3、数据表、数据字段必须加入中文注释
解读:以便后续维护
4、必须把字段定义为NOT NULL并且提供默认值
解读:
(1)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化
(2)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多
(3)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识(5.7基本无区别)
(4)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’shenjian’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录
5、禁止使用TEXT、BLOB类型
解读:会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能
6、小数类型为 decimal ,禁止使用 float 和 double
解读:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储
7、建议使用varchar(20)存储手机号
解读:
(1)涉及到区号或者国家代号,可能出现+-()
(2)varchar可以支持模糊查询,例如:like“138%”
8、禁止使用ENUM,可使用TINYINT代替
解读:ENUM的内部实际存储就是整数