2019独角兽企业重金招聘Python工程师标准>>>

范式化和反范式化

范式化是指数据库设计的规范,目前说到范式化一般是指第三设计范式,也就是要求数据表中不存在非关键字段对任意候选关键字段的传递函数依赖,则符合第三范式。

呵呵,这说了个嘛玩意哈/(ㄒoㄒ)/~~,直接举例:

商品名称        价格        重量        有效期        分类        分类描述

可乐                3.00        250ml     2015.10    饮料        碳酸饮料

苹果                5.00        100g        2015.10    水果        新鲜水果

分类和分类描述相对于商品名称来说,他们是存在着依赖关系的,分类描述依赖于分类,而分类依赖于商品名称,也就是说存在非关键字段“分类描述”对关键字段“商品名称”的传递函数依赖,这就造成了很多的麻烦,比如进行增删改操作的时候。这就需要对表进行拆分,将分类和描述单独列出来。

1.

商品名称        价格        重量        有效期

可乐                3.00        250ml        2015.10

苹果                5.00        100g            2015.10

2.

分类            分类描述

酒水饮料        碳酸饮料

生鲜食品        水果

3.

分类            商品名称

酒水饮料        可乐

生鲜食品        苹果

这样将一个表一分为三之后就符合了第三范式要求。

反范式化

反范式化是指为了查询效率的提高把原本符合第三范式的表适当的增加冗余,以达到优化查询效率的目的,反范式化是一种以空间换时间的操作。

这个就不举列子了,简单的说,就是本来需要关联很多表的查询,把他们写到一张表中,这样只需要查一张表就可以了,虽然增加了数据冗余,但执行效率快了很多,说白了,少关联一些表。

表的垂直拆分

所谓垂直拆分,就是把原来一个很多列的表拆分成多个表,这解决了表的宽度问题,通常垂直拆分何以按照以下原则进行:

1.    把不常用的字段单独放到一个表中

2.    把大字段独立存放到一个表中

3.    把经常一起使用的字段放到一起

这个之前也有提到,不用多说。

表的水平拆分

表的水平拆分主要是为了解决单张表数据量过大的问题,水平拆分的表每一个表的结构都是完全一致的。

常用的水平拆分方法为:

  1. 对customer_id进行hash运算,如果要查分成5个表,则使用mod(customer_id,5)取出0-4个值

2.      针对不同的hashID把数据存到不同的表中

挑战:1.    跨分区表进行数据查询    2.    统计及后台报表操作。

转载于:https://my.oschina.net/woshixiaomayi/blog/513546

小蚂蚁学习mysql性能优化(8)--数据库结构优化--范式化和反范式化,水平分表,垂直分表...相关推荐

  1. 数据库--分库分表--垂直分表与水平分表

    原文网址:数据库--分库分表--垂直分表与水平分表_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍数据库的分库分表的方案:垂直分表与水平分表. 关系型数据库本身比较容易成为系统瓶颈,单机存储容 ...

  2. 小蚂蚁学习mysql性能优化(5)--SQL以及索引优化--需要添加索引的列

    2019独角兽企业重金招聘Python工程师标准>>> 在哪些列上添加索引? 1.    通常选择在where从句中,group by从句,order by从句,on从句中出现的列添 ...

  3. php连接数据库配置优化,小蚂蚁学习mysql性能优化(9)--操作系统配置优化--mysql配置文件优化...

    操作系统配置优化 数据库是基于操作系统的,目前大多数mysql都是安装在linux系统之上,所以对于操作系统的一些参数配置也会影响到mysql的性能 网络方面的配置修改    \etc\sysctal ...

  4. 小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法

    2019独角兽企业重金招聘Python工程师标准>>> max()的优化 例如:explain select max(`payment_date`)  from payment; 可 ...

  5. mysql如何分表_MySQL分表和分区的具体实现方法

    垂直分表 垂直分表就是一个包含有很多列的表拆分成多个表,比如表A包含20个字段,现在拆分成表A1和A2,两个表各十个字段(具体如何拆根据业务来选择). 优势:在高并发的情境下,可以减少表锁和行锁的次数 ...

  6. mysql分表_mysql分表详解

    经常听到有人说"数据表太大了,需要分表","xxxx了,要分表"的言论,那么,到底为什么要分表? 难道数据量大就要分表? mysql数据量对索引的影响 本人my ...

  7. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  8. mysql架构学习——数据库结构优化笔记

    数据库结构优化 目的 减少数据冗余 尽量避免数据维护中出现更新,插入和删除异常 设计步骤 需求分析:全面了解产品设计的存储需求,数据处理需求,数据的安全性和完整性 逻辑设计:设计数据的逻辑存储结构,数 ...

  9. ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

最新文章

  1. 计算机教学中因才施教,浅析高校《大学计算机基础》教学中的因材施教
  2. [转]FlashSocket通信安全策略一点心得
  3. python第六章函数课后答案_浙大PTA-Python题库 函数题(6-1~6-6)题解
  4. ALBERT、XLNet,NLP技术发展太快,如何才能跟得上节奏?
  5. 2020年中国便利店发展报告
  6. c语言求100∑k=1k 30,C语言程序设计〔第三章〕.ppt
  7. MPMoviePlayerController属性,方法,通知整理
  8. pytorch---模型加载与保存(6)通过设备保存/加载模型
  9. Jtopo Demo源码下载方式
  10. Java之 OOP编程思想理解1
  11. 大漠插件最新版本7.2031
  12. LFM回波信号仿真,加汉明窗,可用的matlab代码
  13. Cocos Creator | 碰撞检测优化-四叉树
  14. Format函数详解
  15. 迷室3第三章难点问题解读
  16. node.js基于JavaScript网上商城毕业设计源码261620
  17. 伦茨科技-智能语音遥控器
  18. H. 知识图谱 知识问答
  19. JPEX受邀参加Blockchain Fest 2022展位爆棚成为全场最靓的仔
  20. Proteus简单入门教程以及使用Proteus仿真STM32F103单片机和Arduino单片机

热门文章

  1. c语言程序设计教程第三版答案9.5,C语言程序设计-第5-9章习题解答.ppt
  2. feign传递多个对象_面向对象
  3. 大学计算机和英语社团加那个,大学里哪些社团值得加入
  4. Docker容器镜像删除不掉解决办法?
  5. qtablewidget设置html,Qt 设置QTableWidget,QListWidget,QTreeWidget鼠标右键
  6. web小知识与问题串烧(html,css,js)
  7. Oracle 9i和10g安装后的基本环境与服务
  8. 逆战网络连接断开连接服务器超时_物联网设备的网络连接---中篇
  9. .net 延时操作_锁、CAS操作和无锁队列的实现
  10. Spring Cloud Stream与RabbitMQ整合