【MySQL进阶之路 | 高级篇】反范式化概述

1. 概述

有的时候不能简单按照规范要求设计数据表,因为有的数据看似冗余,其实对业务来说也十分重要。这个时候,我们就要遵循业务优先的原则,首先满足业务需求,再尽量减少冗余。

如果数据库的数据量很大,系统的UV和PV访问频率比较高,则完全按照MySQL的三大范式设计数据表,读数据时会产生大量的关联查询,再一定程度上会影响数据库的性能。如果我们想对查询效率进行优化,反范式化也是一种优化思路。此时,可以通过再数据表中增加冗余自动字段来提高数据库的性能。

规范化VS性能

  1. 为满足某种商业目标,数据库性能比规范化更重要。
  2. 再数据规范化的同时,更要综合考虑数据库的i性能。
  3. 通过再给定的表中增加额外的字段,以大量减少需要从中搜索信息需要的时间。
  4. 通过再给定表中插入计算列,以方便查询。

2. 反范式化的新问题

反范式可以通过空间换时间,提升查询效率,但反范式化也会带来一些问题。

  • 存储空间变大了。
  • 表中增加了冗余字段。一个表做了修改,另一个表中增加的冗余字段也需要做同步修改,否则数据会不一致。
  • 若采用存储过程来支持数据的更新,删除等额外操作,如果频繁更新,会非常消耗系统资源。
  • 在数据量小的情况下,反范式不能体现性能的优势,可能还会让数据库的设计更加复杂。

3. 建议

增加冗余字段一定要符合如下两个条件。只有满足这两个条件,才可以考虑增加冗余字段。

  • 这个冗余字段不需要经常更新
  • 这个冗余字段查询的时候不可或缺。

4. 历史快照和历史数据的需要

在现实生活中,我们经常需要一些冗余信息,比如订单的收货人信息,包括姓名,电话和地址等。每次发生的订单收获信息都属于历史快照,需要进行保存,但用户可以随时修改自己的信息,这时保存这些冗余信息是非常有必要的。

反范式优化也常用于数据仓库的设计中,因为数据仓库用来存储历史数据,对增删改的实时性要求不强,对历史数据的分析要求强。这时适当允许数据的冗余度,更方便查询。

相关推荐

  1. MySQL | 高级范式化概述

    2024-07-23 08:48:04       23 阅读
  2. Python学习-MySQL

    2024-07-23 08:48:04       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 08:48:04       106 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 08:48:04       116 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 08:48:04       95 阅读
  4. Python语言-面向对象

    2024-07-23 08:48:04       103 阅读

热门阅读

  1. python—爬虫爬取图片网页实例

    2024-07-23 08:48:04       29 阅读
  2. stm32 io输入中断

    2024-07-23 08:48:04       30 阅读
  3. pytorch lightning报错all tensors to be on the same device

    2024-07-23 08:48:04       21 阅读
  4. 关于正运动学解机器人手臂算法

    2024-07-23 08:48:04       25 阅读
  5. Torus结构代码实现

    2024-07-23 08:48:04       26 阅读
  6. linux命令-touch-修改文件时间

    2024-07-23 08:48:04       25 阅读
  7. Oracle(17)什么是物化视图(Materialized View)?

    2024-07-23 08:48:04       24 阅读
  8. Electron 和 React 开发桌面应用程序

    2024-07-23 08:48:04       29 阅读
  9. (20240721)无机非金属材料工学(3)混凝土

    2024-07-23 08:48:04       24 阅读