完全符合范式化的设计真的完美无缺吗?很明显在实际的业务查询中会大量存在着表的关联查询,而表设计都做成了范式化设计(甚至很高的范式),大量的表关联很多的时候非常影响查询的性能。
反范式化就是违反范式化设计:
1、为了性能和读取效率而适当的违反对数据库设计范式的要求;
2、为了查询的性能,允许存在部分(少量)冗余数据
换句话来说反范式化就是使用空间来换取时间。
1.范式化和反范式对比
1、范式化的更新操作通常比反范式化要快(字段较少)。
2、当数据较好地范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据。
3、范式化的表通常更小,所以占据的内存更少。
4、范式化设计的缺点是通常需要关联,稍微复杂一些的查询语句在符合范式的表上都可能需要至少一次关联,也许更多。
5、复杂一些的查询语句也可能使一些索引策略无效。例如,范式化可能将列存放在不同的表中,而这些列如果在一个表中本可以属于同一个索引。
2.项目中常见的反范式实现
范式化和反范式化的各有优劣,怎么选择最佳的设计?小孩子才做选择,我们全都要!!!
2.1 缓存与汇总数据
“缓存”来表示存储那些可以比较简单地从其他表获取数据的表。<