Mysql范式与反范式

2021.03.10 14:03 377
阅读约 2 分钟

范式的优缺点

优点

  • 范式化的更新操作通常更快
  • 范式化的冗余数据更少,所以只需要修改少量的数据
  • 范式化的表通常更小,可以更好的放在内存中,所以执行速度更快
  • 很少有冗余数据意味着检索列表更少需要DISTINCT或者GROUP BY

缺点

范式化设计的schema的缺点是通常需要关联。稍微复杂的查询语句在范式化设计的中都需要至少一次关联操作。这也可能会导致索引策略无效。

反范式化的优缺点

优点

反范式化的schema因为所有数据都在一张表中,可以很好的避免关联。

当数据量大的时候可能比关联要快的多,因为避免了多表关联时的随机IO。

全表扫描基本上是顺序IO

缺点

  • 反范式化的更新操作较慢
  • 范式化的冗余数据更多
  • 范式化的表通常比较大

最佳的设计

范式化和反范式化各有优缺点,在使用中应该避免走极端,吸取各自的优点。

  • 可以在不同的表中储存相同的字段,避免复杂的关联操作
  • 从父表中冗余一些数据。例如通过作者的名字对消息做排序的代价将会非常高,但是如果在消息表中缓存了父表中的作者信息并且建好搜索引,则可以非常高效的完成排序。
  • 缓存衍生值。例如缓存用户发送信息的数量,可以每次关联用户发送的信息并统计数量,但更好的做法是在user表中添加一个num_message字段,并且每次用户发送信息时更新这个值。
字数:527 发布于 6 个月前
Copyright 2018-2021 Siques