MySQL学习笔记6

133 阅读2分钟

SCHEMA设计陷阱

太多的列

太多的关联

所谓的“实体-属性-值”(EAV)设计模式是一个常见的糟糕设计模式,尤其是在MySQL下不能靠谱地工作。MySQL限制了每个关联操作最多只能有61张表,但是EAV数据库需要许多自关联

单个查询最好在12个表以内做关联。

范式与反范式

范式化通常能够带来好处:

  • 范式化的更新操作通常比反范式化要
  • 当数据较好地范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据。
  • 范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快
  • 很少有多余的数据意味着检索列表数据时更少需要DISTINCT 或者GROUP BY 语句

范式化设计的schema的缺点是通常需要关联。

最常见的反范式化数据的方法是复制或者缓存,在不同的表中存储相同的特定列。

当重建汇总表和缓存表时,通常需要保证数据在操作时依然可用。这就需要通过使用“影子表”来实现,“影子表”指的是一张在真实表“背后”创建的表。当完成了建表操作后,可以通过一个原子的重命名操作切换影子表和原表

计数器表

常规,一行数据。问题在于,对于任何想要更新这一行的事务来说,这条记录上都有一个全局的互斥锁(mutex)。这会使得这些事务只能串行执行。要获得更高的并发更新性能,也可以将计数器保存在多行中,每次随机选择一行进行更新。获得统计结果需要做聚合。