schema与数据类型优化
数据类型的优化
1.更小的数据类型通常更好
2.简单就好
3.尽量必灭 null合理使用范式和反范式
1.范式
优点:
1.1 范式化的更新比反范式的更新快
1.2 当数据较好的范式话,很少或者没有重复数据
1.3 范式化的数据比较小,可以放在内存中,操作比较快
缺点:
通常需要进行关联
2.反范式
优点:
2.1 所有的数据都在同一张表中,可以避免关联
2.2 可以设计有效的索引
缺点:
表格内的沉余较多,删除的时候,会造成表内有用的数据丢失
在企业中很少做到严格意义上的范式和反范式,一般混合使用
范式设计例子:
反范式设计例子:
- 主键的选择
1.代理主键
与业务无关,无意义的数字序列
2.自然主键
事务属性的唯一标识
推荐使用代理主键:
不与业务耦合,更容易维护
- 字符集的选择
1.纯拉丁字符能表示的内容,没必要选择 latin1 之外的其他字符编码,因为这会节省大量的存储空间。
2.如果我们可以确定不需要存放多种语言,就没必要非得使用UTF8或者其他UNICODE字符类型,这回造成大量的存储空间浪费。
3.MySQL的数据类型可以精确到字段,所以当我们需要大型数据库中存放多字节数据的时候,可以通过对不同表不同字段使用不同的数据类型来较大程度减小数据存储量,进而降低 IO 操作次数并提高缓存命中率。 - 存储引擎的选择
适当的数据冗余
1.被频繁引用且只能通过join(或者更多)大表的方式才能得到的独立小字段
2.通过空间换时间的方式,但是要确保数据的一致性不会被破坏,更新的同时冗余字段也要被更新适当的拆分
当我们的表中有text或者很大的varchar类型字段的时候,如果我们访问这张表大部分都不需要访问这个字段,我们就义无反顾的把这个字段拆分到一张单独的表中,减少常用字段占用的存储空间。好处就是每个数据块中可以存储的数据条数大大增加,减少IO次数,提高内存中缓存的命中率