MYSQL性能优化之Mysql数据库结构设计

这里写图片描述
数据库结构设置和SQL语句优化是最能提升性能的优化了,和项目进行持续优化

  • 减少数据冗余(数据多次出现,或者一列数据可以通过其他列计算得到)
  • 尽量避免数据维护中出现更新,插入和删除异常(可以利用范式化模型来解决)
    • 插入异常:表中的某个实体随着另一个实体而存在
    • 更新异常:如果更改表中的某个实例的单独属性时,需要对多行进行更新。(数据冗余)
    • 删除异常: 删除表中的某个实体,另一个实体也消失
  • 节约数据存储空间
  • 提高查询效率
    插入异常示例:
    这里写图片描述
    更新异常示例:
    这里写图片描述

如果没有学生选择这门课,就没法插入课程.

这里写图片描述
MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。

MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。

最下层为存储引擎,其负责MySQL中的数据存储和提取。和Linux下的文件系统类似,每种存储引擎都有其优势和劣势。中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异

MySQL查询过程:
这里写图片描述
这个过程的成本是非常高的。
客户端向MySQL服务器发送一条查询请求
服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段
服务器进行SQL解析、预处理、再由优化器生成对应的执行计划
MySQL根据执行计划,调用存储引擎的API来执行查询
将结果返回给客户端,同时缓存查询结果

这里写图片描述
mysql最多允许关联61个表(建议:关联表最多控制在十个以内)
分区表是在物理存储上的拆分,但是逻辑是没有改变的(同一个数据库实例下进行)。分库分表两个都是需要改变的。
分区键的选择非常关键
分区表最好在联机分析处理OLAP(On-Line Analytical Processing)环境中使用,比如日志
外键最好不要使用。建立索引还是很有必要的。

数据库结构设计

  1. 需求分析文档(技术和业务的沟通)
    1. (数据特点,数据库读取和修改完成产品设计的功能,对数据处理产生的相应时间,数据处理方式是批量处理还是连接处理)
  2. 逻辑设计
  3. 物理设计
  4. 维护优化
    这里写图片描述
    这里写图片描述
    这里写图片描述
范式化模型:
  • 每个字段只包含最小的信息属性。如果某个字段名称为name-age,value为zhangsan-23,则这个模型不满足第一范式,需要将name-age分为两个属性name和age后才满足第一范式。
  • (在满足第一范式基础上)模型含有主键,非主键字段依赖主键。比如订单这个模型,它的主键是订单ID,那么订单模型其它字段都应该依赖于订单ID,如商品ID和订单没有直接关系,则这个属性不应该放到订单模型而应该放到”订单-商品”中间表。
  • (在满足第二范式基础上)模型非主键字段不能相互依赖。订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列”订单编号”相关,再细看你会发现”顾客姓名”和”顾客编号”相关,”顾客编号”和”订单编号”又相关,最后经过传递依赖,”顾客姓名”也和”订单编号”相关。为了满足第三范式,应去掉”顾客姓名”列,放入客户表中。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值