char与varchar如何选择

原则:

  1. 如果列中要存储的数据长度差不多一致的,则因该考虑用char;否则因该考虑用varchar。
  2. 如果列中的最大数据长度小于50Byte,则一般也考虑用char。(当然如果这个列很少用,则基于节省空间和减少I/O的考虑,还是可以选择varchar)
  3. 一般不宜定义大于50Byte的char类型列。 decimal与float如何选择

原则:

  1. decimal用于存储精确数据,而float只能用于存储非精确数据。故而精确数据只能选择用decimal类型。
  2. 由于float的存储空间开销一般比decimal小(精确到7位小数只需4个字节,二精确到15位小数只需8个字节)故而非精确数据有限选择float类型。

时间类型如何选择

使用int来存储时间字段的优缺点

  • 优点:字段长度比datetime小。
  • 缺点:使用不方便,要进行函数转换。
  • 限制:只能存储大2038年-1-19 11:14:07即2^32为21474483648
    需要存储时间粒度
  • 年月日小时分秒周

如何选择主键

  1. 区分业务主键和数据库主键
    业务主键用于标识业务数据,进行表与表之间的关联;
    数据库主键为了优化数据存储(InnoDB会生成6个字节的隐含主键)
  2. 跟数据库的类型,考虑主键是否要顺序增长
    有些数据库是按主键的顺序逻辑存储的
  3. 主键的字段类型所占空间要尽可能的小
    对于使用聚集索引方式存储的表,每个索引后都会附加主键信息。

避免使用外键约束

1.降低数据导入效率。
2.增加维护成本。
3.虽然不建议使用外键约束,但是相关联的列上一定要建立索引

避免使用触发器

1、降低数据导入效率。
2、可能会出现意想不到的数据异常。
3、使业务逻辑变的复杂。

关于预留字段

1、无法准确的知道的预留字段的类型。
2、无法准确的知道预留字段中所存储的内容。
3、后期维护预留字段所要的成本,同增加一个字段所需要的成本是相同的。
4、严禁使用预留字段。

什么是反范式化

反方式化是针对范式化而言的,所谓的反范式化就是为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,而允许存在少量的数据冗余,换句话来说反范式化就是使用空间来换取时间。

为什么反范式化

1、减少表的管理数量
2、增加数据的读取效率
3、反范式化一定要适度

维护和优化中要做什么

1、维护数据字典
2、维护索引
3、维护表结构
4、在适当的时候对表进行水平拆分或垂直拆分