MySQL优化第二篇

MySQL优化第二篇

    • 性能分析
    • 小表驱动大表
      • 慢查询日志
      • 日志分析工具mysqldumpslow
    • Show Profile进行SQL分析(重中之重)

七种JOIN

1、inner join :可以简写为join,表示的是交集,也就是两张表的共同数据

sql语句:select * from tbl_emp e inner join tbl_dept d on e.deptId=d.id
在这里插入图片描述

2、left join (左外连接):从集合上看就是A 、B 的交集加上A的私有,即左表的所有数据加上 左右表中相交的数据

sql 语句:select * from tbl_emp e left join tbl_dept d on e.deptId=d.id

在这里插入图片描述

前七条共有数据;第八条a表独有数据,b表补null

3、right join(右外连接,全B):前七条共有数据;第八条b表独有数据,a表补null

4、左join独A:就是A表独有的部分,在left join的基础上加上where条件

sql语句:select * from tbl_emp e left join tbl_dept d on e.deptId=d.id where d.id is null

在这里插入图片描述

5、右join独B:就是B表的独有部分,同理可知在right join的基础上加上where条件

6、full join (全外连接):MySQL不支持使用full join 如果想要实现全A+B可以使用union去重中间部分(union关键字可以合并 并且 去重

sql语句:

select * from tbl_emp a left join tbl_dept b on a.deptId=b.id
union
select * from tbl_emp a right join tbl_dept b on a.deptId=b.id

在这里插入图片描述

7、A、B各自独有集合

select * from tbl_emp a left join tbl_dept b on a.deptId=b.id where b.id is null
union
select * from tbl_emp a right join tbl_dept b on a.deptId=b.id where a.deptId is null

在这里插入图片描述

性能分析

MySQL Query Optimizer(查询优化器)[ˈkwɪəri] [ˈɒptɪmaɪzə]
Mysql中专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划(他认为最优的数据检索方式,但不见得是DBA认为是最优的,这部分最耗费时间)

当客户端向MySQL请求一条Query,命令解析器模块完成请求分类,区别出是SELECT并转发给MySQL Query Optimizer时,MySQL Query Optimizer首先会对整条Query进行优化,处理掉一些常量表达式的预算直接换算成常量值。并对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等。然后分析Query 中的 Hint信息(如果有),看显示Hint信息是否可以完全确定该Query的执行计划。如果没有Hint 或Hint信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query进行写相应的计算分析,然后再得出最后的执行计划

小表驱动大表

exists语法:SELECT * FROM table WHERE EXISTS (subquery)

该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE或FALSE)来决定主查询的数据结果是否得以保留

优化原则:

小表驱动大表,即小的数据集驱动大的数据集

就比如大表是A 小表是B

1、当B表的数据集必须小于A表的数据集的时候,用in会比用exists好

2、当A表的数据集是小于B表的数据集的时候,用exists会比较好

重点:A表与B表的id字段应该建立索引

in和exists的用法

sql语句:

select * from tbl_emp e where e.deptId in (select id from tbl_dept d)

select * from tbl_emp e where EXISTS (select 1 from tbl_dept d where e.deptId=d.id)

在这里插入图片描述

慢查询日志

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,**具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql 结合之前explain进行全面分析

操作说明:

默认情况下,MySQL数据库没有开启慢查询日速,需要我们手动来设置这个参数

但是开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。

查看是否开启以及如何开启慢查询

默认: SHOW VARIABLES LIKE ‘%slow_query_log%’;

开启:set global slow_query_log=1;,只对当前数据库生效,如果MySQL重启后则会失效

永久开启:就必须修改配置文件my.cnf文件,将下面两行的数据配置进文件中

slow_query_log =1
slow_query_log_file=/var/lib/mysqatguigu-slow.log

重点:关于慢查询的参数slow_query_log_file,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.log(如果没有指定参数slow_query_log_file的话

查看慢sql阈值时间:即查看long_query_time的值。

查看命令是:SHOW VARIABLES LIKE ‘long_query_time%’;

修改命令是:set global long_query_time=3;

查询当前有多少慢查询sql:show global status like ‘%Slow_queries%’

重点:如果显示修改无效的话可以重开一个连接,或者换一个语句:show global variables like ‘long_query_time’;

日志分析工具mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,是非常复杂且麻烦的,MySQL提供了日志分析工具mysqldumpslow

查看mysqldumpslow的帮助信息,mysqldumpslow --help

常用mysqldumpslow帮助信息:

s是表示按照何种方式排序
c访问次数
l锁定时间
r返回记录
t查询时间
al平均锁定时间
ar平均返回记录数
at平均查询时间
t即为返回前面多少条的数据
g后边搭配一个正则匹配模式,大小写不敏感的

常用举例:

得到返回记录集最多的10个SQL:

mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log
得到访问次数最多的10个SQL:

mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log
得到按照时间排序的前10条里面含有左连接的查询语句:

mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/atguigu-slow.log
另外建议在使用这些命令时结合│和more 使用,否则有可能出现爆屏情况:

mysqldumpslow -s r-t 10 /ar/lib/mysql/atguigu-slow.log | more

Show Profile进行SQL分析(重中之重)

Show Profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量

使用步骤:

1、查看当前mysql是否支持:**show variables like 'profiling;**或者 show variables like ‘profiling %’;

2、开启这个功能(因为默认是关闭的,所以需要手动开启):set profiling=on;

3、运行SQL

4、查看结果:show profiles;

5、诊断SQL,show profile cpu,block io for query ID号;(ID号为第4步Query_ID列中数字)

参数信息说明:

ALL显示所有的开销信息。
BLOCK IO显示块lO相关开销。
**CONTEXT SWITCHES **上下文切换相关开销。
CPU显示CPU相关开销信息。
IPC显示发送和接收相关开销信息。
MEMORY显示内存相关开销信息。
PAGE FAULTS显示页面错误相关开销信息。
SOURCE显示和Source_function,Source_file,Source_line相关的开销信息。
SWAPS显示交换次数相关开销的信息。

Status列显示结果表示严重问题的有

  • converting HEAP to MyISAM查询结果太大,内存都不够用了往磁盘上搬了。
  • Creating tmp table创建临时表,拷贝数据到临时表,用完再删除
  • Copying to tmp table on disk把内存中临时表复制到磁盘,危险!
  • locked锁了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/132949.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用动态ip登录账号的风险高不高?

使用动态ip登录账号在一定程度上提供了额外的安全保障和匿名性,但与此同时也存在一些风险和风控挑战。本文将解密使用动态ip登录账号的真相,明确安全与风险的并存之道。 1、增强隐私保护: 使用动态ip登录账号可以隐藏您的真实IP地址&#xff…

21 Spring Boot整合Redis

目录 一、Redis简介 二、创建springboot整合redis工程 三、添加依赖 四、配置Yml 五、创建Redis配置类 六、创建Redis工具类,封装Redis的api 七、操作Redis 八、验证 一、Redis简介 简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统…

无涯教程-JavaScript - OR函数

描述 如果任何参数为TRUE,则OR函数返回TRUE;如果所有参数为FALSE,则返回FALSE。 语法 OR (logical1, [logical2], ...) 争论 Argument描述Required/Optionallogical1 您要测试的1到255个条件可以是TRUE或FALSE。 您要测试的1到255个条件可以是TRUE或FALSE。 Req…

JDK API文档地址(中文和英文)

JDK1.6 JDK 1.6 中文手册 JDK1.8 Java 8 中文版 - 在线API手册 - 码工具 Java 官方文档 |官方教程|Java 官方文档 API中文手册|Java 官方文档参考文档_w3cschool 网上还有很多百度网盘中也有 JDK17 https://doc.qzxdp.cn/jdk/17/zh/api/index.html 英文文档 所有版本 …

Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例

Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例 点击封面跳转到Unity国际版下载页面 简介 在Unity中,性能优化是游戏开发过程中非常重要的一环。其中,Shader的优化对于游戏的性能提升起着至关重要的作用。…

学习视觉SLAM需要会些什么?

前言 SLAM是现阶段很多研究生的研究方向,我也是作为一个即将步入视觉SLAM的研究生,网上对于SLAM的介绍很多,但很少有人完整系统的告诉你学习视觉SLAM该有那些基础,那么此贴将告诉你学习SLAM你要有那些方面的基础。 文章目录 前言…

Java 华为真题-选修课

需求: 现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的…

计算机网络TCP篇之流量控制

计算机网络TCP篇之流量控制 今天谈一谈我对于tcp流量控制的看法 在网络拓扑中如果发送方节点的发送速率大于接受方节点的接受速率,数据会不断在接受方的缓冲区累积,直到接受方的缓冲区满的时候,发送方继续发送数据,这时候接受方无…

文件上传漏洞~操作手册

目录 上传文件一般过滤方式 客服端校验 服务端校验 黑白名单机制 常规文件上传漏洞绕过 客户端绕过 1.游览器禁用JavaScript 2.正常burp suite抓包改包 服务端绕过 1.Content-Type绕过 2.黑名单绕过 1)命名规则绕过 2)大小写绕过 3&#x…

怎么用excel管理固定资产

在当今的数字时代,我们已经习惯了使用各种电子工具来提高我们的生产力。其中,Excel无疑是一个强大的工具,它不仅可以帮助我们处理数据,还可以用来进行复杂的计算和分析。然而,你可能不知道的是,Excel也可以…

优思学院|什么是精益项目管理?

正确地使用精益思想和技术是可以减少项目中的浪费、提高客户满意度,并提高项目的利润率。 在现实世界中,项目经理的工作充满了挑战。他们不仅需要专注于产品和团队,还必须确保客户的满意度。同时,他们还必须与矩阵组织打交道&…

异步FIFO设计

1 FIFO简介 FIFO的本质是RAM,具有先进先出的特性。 FIFO的基本使用原则:空时不能读,满时不能写 FIFO的两个重要参数:宽度和深度 FIFO的两种类型: 同步FIFO:读写时钟相同,通常用来做数据缓存…

本地录像视频文件如何推送到视频监控平台EasyCVR进行AI视频智能分析?

安防监控平台EasyCVR支持多协议、多类型设备接入,可以实现多现场的前端摄像头等设备统一集中接入与视频汇聚管理,并能进行视频高清监控、录像、云存储与磁盘阵列存储、检索与回放、级联共享等视频功能。视频汇聚平台既具备传统安防监控、视频监控的视频能…

【算法】前缀和与差分

大家好!今天我们来学习前缀和与差分算法。 目录 1. 一维前缀和 1.1 定义 1.2 计算方法 1.3 作用 1.4 适用场景 1.5 模板题 1.6 总结 2. 二维前缀和 2.1 定义 2.2 计算方法 2.3 模板题 2.4 总结 3. 一维差分 3.1 定义 3.2 差分数组 3.3 差分标记 3…

什么是JavaScript中的严格模式(strict mode)?应用场景是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 严格模式(Strict Mode):⭐ 使用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

SpringMVC多文件上传

文章目录 一、文件上传1.1 导入pom依赖1.2 配置文件上传解析器1.3 设置文件上传表单1.4 实现文件上传 二、文件下载三、多文件上传四、JRebel的使用 一、文件上传 1.1 导入pom依赖 <commons-fileupload.version>1.3.3</commons-fileupload.version><dependency…

高德地图实现-微信小程序地图导航

效果图&#xff1a; 一、准备阶段 1、在高德开放平台注册成为开发者2、申请开发者密钥&#xff08;key&#xff09;。3、下载并解压高德地图微信小程序SDK 高德开放平台&#xff1a; 注册账号(https://lbs.amap.com/)) 申请小程序应用的 key 应用管理(https://console.ama…

苹果“FindMy”APP

“FindMy”是一项 Apple 服务&#xff0c;可以定位设备。在 iOS 13 之前&#xff0c;Apple将该服务拆分为单独的应用程序&#xff1a;“查找我的 iPhone”&#xff08;或 iPad 或 Mac&#xff09;和“查找我的朋友”。该服务适用于iPhone、iPad、Mac、Apple Watch、AirPods、Ai…

MyBatisPlus(二)基础Mapperr接口:增删改查

MyBatisPlus&#xff1a;基础Mapper接口&#xff1a;增删改查 插入一条数据 代码 Testpublic void insert() {User user new User();user.setId(6L);user.setName("张三");user.setAge(25);user.setEmail("zhangsanexample.com");userMapper.insert(use…

什么是接口自动化?为什么要做?和怎么做接口自动化?

服务端接口测试介绍 什么是服务端&#xff1f; 一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例&#xff0c;服务端便是网关&#xff08;包括网关在内&#xff09;之后的链路。 什么是接口&#xf…