数据库设计时要满足规范化这个道理大家都非常清楚,甚至有数据库的三范式, 好吧, 这有点让我想起了机器人的三定律.但是否数据的规范化程度越高越好呢?这还是由实际需求来决定。

因为规范化越高,那么产生的关系就越多,关系过多的直接结果就是导致表之间的连接操作越频繁,而表之间的连接操作是性能较低的操作,直接影响到査询的速度,所以,对于査询较多的应用,就需要根据实际情况运用逆规范化对数据进行设计,通过逆规范化来提高査询的性能。

例如,移动电话的用户每月都会査询自己的账单,账单信息一般包含用户的名字和本月消费总金额,设想一下,如果用户的姓名和属性信息存放在一个表中,假设表名为A,而用户的 编号和他对应的账单信息存放在另外一张B表中,那么,用户每次查询自己的月账单时,数据库査询时都要进行表连接,因为账单表B中并不包含用户的名字,所以必须通过关联A表取 过来,如果在数据库设计时考虑到这一点,就可以在B表增加一个冗余字段存放用户的名字, 这样在査询账单时就不用再做表关联,可以使査询有更好的性能。

反规范的好处是降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,相 应带来的问题是可能出现数据的完整性问题。加快查询速度,但会降低修改速度。因此,决定 做反规范时,一定要权衡利弊,仔细分析应用的数据存取需求和实际的性能特点,好的索引和 其他方法经常能够解决性能问题,而不必采用反规范这种方法。

在进行反规范操作之前,要充分考虑数据的存取需求、常用表的大小、一些特殊的计算(例 如合计)、数据的物理存储位置等。常用的反规范技术有增加冗余列、增加派生列、重新组表 和分割表。

增加冗余列:指在多个表中具有相同的列,它常用来在查询时避免连接操作。

增加派生列:指增加的列来自其他表中的数据,由其他表中的数据经过计算生成。增 加的派生列其作用是在查询时减少连接操作,避免使用集函数。

重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新 组成一个表来减少连接而提高性能.

另外,逆规范技术需要维护数据的完整性。无论使用何种反规范技术,都需要一定的管理 来维护数据的完整性,常用的方法是批处理维护、应用逻辑和触发器。 1. 批处理维护是指对复制列或派生列的修改积累一定的时间后,运行一批处理作业或存 储过程对复制或派生列进行修改,这只能在对实时性要求不高的情况下使用. 2. 数据的完整性也可由应用逻辑来实现,这就要求必须在同一事务中对所有涉及的表进 行增、删、改操作.用应用逻辑来实现数据的完整性风险较大,因为同一逻辑必须在所有的应 用中使用和维护,容易遗漏,特别是在需求变化时,不易于维护。 3. 另一种方式就是使用触发器,对数据的任何修改立即触发对复制列或派生列的相应修 改,触发器是实时的,而且相应的处理逻辑只在一个地方出现,易于维护•一般来说,是解决 这类问题比较好的办法。

mysql 逆范式化_mysql优化(三) 逆规范化与反三范式相关推荐

  1. 物理机存放mysql实例原则_MySQL优化笔记(四)--表的设计与优化(单表、多表)...

    前面讲了SQL优化以及索引的使用.设计优化了,那么接下来就到表的设计与优化啦!!!真实地去设计优化单表结构以及讲述多表设计基本原则(结合真实的生产环境的取舍来讲述). 文章结构:(1)单表设计与优化: ...

  2. window+kill+mysql慢查询_MySQL优化-(2)-慢查询日志工具-pt-query-digest

    1. pt-query-digest简介 第三方工具. perl脚本; 可以分析 binlog, general log, slowlog; 也可以通过 show processlist 或者 通过 ...

  3. 优化mysql服务器硬件包括_MySQL优化之一:服务器硬件和操作系统

    1 服务器硬件优化 在挑选数据库服务器时,可以从以下几个方面考虑: 1)CPU:建议采用高性能的服务器,如DELL R7.R8或R9系列的服务器. 2)磁盘:数据库服务器最大的制约在于磁盘I/O,如果 ...

  4. mysql分页案例_MySQL优化案例系列-mysql分页优化

    通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...

  5. mysql 热块_mysql 优化

    数据库层面:应用系统层面优化SQL优化 SQL优化一般通过分析慢查询日志来抓取长事务高消耗的sql,通过结合具体业务,对sql逻辑进行分析and精简,or重写sql.通过配置slow_query_lo ...

  6. mysql 热块_MySQL分布式集群之MyCAT(三)rule的分析【转】

    首先写在最前面,MyCAT1.4的alpha版本已经发布了,这里面修复了不少的bug,也完善了一细节,之前两篇博客已经做了一些修改 ---------------------------------- ...

  7. mysql select效率_Mysql优化之selectcount效率_MySQL

    bitsCN.com 1.任何情况下SELECT COUNT(*) FROM tablename是最优选择: 2.尽量减少SELECT COUNT(*) FROM tablename WHERE CO ...

  8. mysql 交换空间_MySQL优化纪录

    优化纪录 20200304第一次 新的ECS型号如下 2 vCPU 4 GiB (I/O优化) ecs.n4.large 3Mbps 弄这个ECS纯属是个人的爱好,折腾一下代码,网站的访问量也不大,所 ...

  9. mysql最大述_MySQL优化(1):Mysql简述

    一.逻辑架构 MySQL也采用分层架构.插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存取相分离,这样就可以根据业务需求来选择适合的存储引擎. 1.层次结构 连接层 -- 业务逻辑处理层(处 ...

最新文章

  1. 逻辑回归:确定一个人是否年收入超过5万美元
  2. ​哪些开发问题最让程序员“头秃”?我们分析了Stack Overflow的11000个问题
  3. struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)
  4. reduce_sum() got an unexpected keyword argument 'keep_dims'
  5. Python 文件读取与写入操作方法
  6. 解决yarn报错:Found incompatible module (yarn config set ignore-engines true)
  7. MariaDB数据库服务常见操作
  8. bert模型可以做文本主题识别吗_BERT模型可以使用无监督的方法做文本相似度任务吗?...
  9. 老妈叫下广场舞视频,想用python转换下视频格式flv转换为mp4
  10. pg8168改mac命令_使用PG8168修改8111b网卡MAC地址
  11. Java int 最大值溢出
  12. Win10安装CUDA报错NVIDIA安装程序失败
  13. 邯郸云计算中心正式开通运营
  14. H3C交换机MPLS配置
  15. Boost出现error C2678
  16. 简述Android操作系统和IOS系统的区别;
  17. 校验导入的Excel文件标题行与要求的标题行是否一致
  18. ParticleSystem中的Culling Mode对耗时有怎样的影响
  19. cisco3560及二层交换机配置vlan及常用命令
  20. ThinkPHP导入Excel文件到数据库的简单实现

热门文章

  1. OpenSSL密码库算法笔记——第5.4.2章 椭圆曲线上点的射影坐标表示
  2. Skype 与 Skype for Business 之间有何区别?
  3. IDEA使用git报Could not read from remote repository
  4. Tensorflow2.0学习(三) — Keras基础应用(Cifar-10图像分类)
  5. c语言 extern 的使用场景
  6. 浅析搭建视频监控汇聚平台的必要性及场景应用
  7. 利用人工智能预测乐高包装的LEGO商标尺寸,深入研究竟有惊人发现
  8. 工作 996,生病 ICU!这一次,程序员不忍了!
  9. React-Native调试状态下App运行缓慢问题解决方案
  10. glided_sky 镀金的天空 爬虫闯关 js加密1