* MySQL优化 - 业务设计与 慢查询

MySQL优化 - 业务设计与 慢查询

1、逻辑设计

三大范式

  • 数据库设计的第一大范式
    • 数据库表中的所有字段都只具有单一属性
    • 单一属性的列是基本数据类型所构成的
    • 设计出来的表都是简单的二维表
    • 第一范式的反例和正例,如下
      在这里插入图片描述
  • 第二大范式
    • 要求表中只具有一个业务主键,也就是说符合第二范式的表不能存在非主键列只对部分主键的依赖关系
    • 反例 和 正例如下:
      在这里插入图片描述
  • 第三大范式
    • 指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上相处了非主键对主键的传递依赖
    • 反例 和 正例 如下:
      在这里插入图片描述

表设计实战:

完全按照三大范式要求设计出来的表:
在这里插入图片描述

在这里插入图片描述
问题:
在这里插入图片描述

反范式化设计
在这里插入图片描述

2、物理设计

根据所选的关系型数据库的特点对逻辑模型进行存储结构的设计
在这里插入图片描述
定义数据库,表 及 字段的命名规范:
在这里插入图片描述

存储引擎的选择:
在这里插入图片描述

为表中的字段选择合适的数据类型:
在这里插入图片描述
浮点类型:
在这里插入图片描述
浮点类型示例如下:
在这里插入图片描述
在这里插入图片描述
日期类型:
在这里插入图片描述
日期类型示例:
在这里插入图片描述
在这里插入图片描述

慢查询

慢查询的定义及作用

慢查询日志,是指mysql记录所有执行超过 long_query_time 参数设定的时间阈值的 SQL 语句的日志。该日志能为 SQL 语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。
在这里插入图片描述

show variables like 'slow_query%'; -- 查询慢查询是否开启
set global long_query_time = 0; -- 设置慢查询的时间
set global slow_query_log = 1;  -- 开启慢查询

慢查询日志中记录的内容:
在这里插入图片描述

# Time: 2020-05-23T00:47:18.116415Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:    10
# Query_time: 0.005000  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1
SET timestamp=1590194838;
SHOW TABLE STATUS LIKE 'testmysam';

慢查询日志内容的解释:
在这里插入图片描述
常用分析慢查询的工具:
mysqldumpslow
在这里插入图片描述
执行以下命令,导出慢查询SQL语句:

mysqldumpslow.pl -s t -t 10 D:\slow.log

在这里插入图片描述

pt_query_digest

导出慢查询文件:

pt-query-digest  --explain h=127.0.0.1, u=root,p=password slow-mysql.log

在这里插入图片描述
汇总的信息【总的查询时间】、【总的锁定时间】、【总的获取数据量】、【扫描的数据量】、【查询大小】

在这里插入图片描述
汇总的信息【总的查询时间】、【总的锁定时间】、【总的获取数据量】、【扫描的数据量】、【查询大小】
在这里插入图片描述
Response: 总的响应时间。
time: 该查询在本次分析中总的时间占比。
calls: 执行次数,即本次分析总共有多少条这种类型的查询语句。
R/Call: 平均每次执行的响应时间。
Item : 查询对象

索引 和 执行计划

索引是什么?
mysql 官方对索引的定义为:

  • 索引(index)是帮助 mysql 高效获取数据的数据结构。
  • 可以得到索引的本质:索引是数据结构。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值