DB设计—范式化和反范式化

19 篇文章 0 订阅

范式化--schema设计趋向于符合三范式

 

优点

  1. 更少或者没有数据冗余
  2. 因为第1点,所以数据更新只更新一个字端。意味着更快的更新速度。
  3. 表体积更小
  4. 查询多数无需distinct去重

 

缺点

  1. 表数量更多
  2. 因为第1点,需要建立更多的索引
  3. 多数查询都需要多表关联!!!
  4. 因为第3点,关联查询极有可能导致索引无效

 

 

反范式化

 

优点

  1. 数据在一个表,避免关联查询的性能消耗
  2. 减少多表建立索引开销
  3. 最差情况:查询时全表扫描,也大概率是顺序IO;比关联查询的随机IO快

 

缺点

  1. 存在数据冗余,尤其不适合数据一致性要求很高的需求。
  2. 过多列—mysql服务器层和存储引擎API之间通过【行缓冲】拷贝数据。在服务器层将缓冲内容解码成各个列。当列过多会导致解码消耗性能过大。随之而来的是CPU飙高。

 

 

最佳实践-范式和反范式的混用

 

例如:

范式化订单表和订单明细表。但反范式主表缓存明细条数,避免查询时统计明细数量;如果用户名不支持修改,主表缓存用户名。避免每次关联查询用户表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值