1.反规范化设计的前提
反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。
2.反规范化设计的优点
能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。
3.反规范化设计的缺点
反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。
4.反规范化设计的方法
(1)增加冗余列:增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。
(2)增加派生列:增加派生列指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量,从而加快查询速度。
(3)重新组表:重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
(4)分割表:有时对表做分割可以提高性能。
5.分割表的方法分类
5.1 水平分割
建立多个列定义相同的表,将一个表中的数据行分别保存在多个表中。水平分割可以降低单表索引的层数和大小。水平分割应用的几种情况:
- 表记录数很多
- 表中的数据具有独立性,比如数据可明显按所属地区、年度等属性进行划分
- 表内容需要存储在多个介质上
5.2 垂直分割
把一个表的列定义拆分到多个表中,并且具有相同的主键列。比如一个表中列数太多,并且某些列数据常用,而某些列数据不常用,就可以进行垂直分割。