MYSQL慢查询日志(开启慢查询配置、explain执行计划SQL优化、各个字段详解、索引失效)

大家好,我是此林。

今天来分享一下MYSQL慢查询日志记录。

目录

1. 定义

2. 开启慢查询

方法一:命令行

方法二:修改配置文件

3. explain性能分析

4. 索引失效

1. 最左前缀法则

2. 对字段做运算、字段类型不匹配

3. 模糊匹配

4. OR 连接条件

5. 数据分布

5. 强制使用索引

1. 定义

慢查询日志记录了所有执行时间超过了long_query_time的SQL语句。

默认情况下MYSQL未开启慢查询日志。

2. 开启慢查询

方法一:命令行

开启慢查询(未加global是会话级别)

设置慢查询时间

重启MYSQL

docker restart mysql-master

# 非docker环境下
systemctl restart mysqld

方法二:修改配置文件

docker环境下:

1. 执行命令

# 切换到docker挂载到本地的MYSQL配置文件目录
cd /root/mysql/master/conf/
# 编辑
vi my.cnf

2. 按下i进入INSERT模式,写入后按下ESC退出,按下:wq保存。(注意:若my.cnf不存在,开头须加上 [mysqld] )。这里设置慢查询时间为1秒。

3. 重启MYSQL

docker restart mysql-master

4. 开始实验

第一个Session窗口

第二个Session窗口

此时,第一个窗口执行提交事务。

可以看到,第二个窗口查询耗时12.27秒。(for update排他锁阻塞)

在/root/mysql/master/data/目录下已生成慢查询日志。(非docker环境下位var/lib/mysql)

查看log,已经记录。

3. explain性能分析

以上我们通过了show_query_log和long_query_time两个参数来配置慢查询。

接下来介绍explain执行计划进行SQL性能分析。

各个字段介绍:

1. id:select查询顺序id,id越大的越先执行;若id相同,执行顺序从上到下。(因为如果是子查询,会有多个explain行)

2. select_type:select的类型。SIMPLE(简单表,即不使用表连接或子查询)、PRIMARY(主查询,即外层查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(select/where之后包含了子查询)等。

3. type(重点):

连接类型,性能由好到坏:NULL、system、const、eq_ref、ref、range、index、all。

  • system访问系统表的时候出现
  • const:根据主键和唯一索引访问
  • ref:根据非唯一索引访问
  • range: 走了索引,但是范围查询
  • index:全扫描整个索引树
  • all:全表扫描

一般我们在SQL优化时候,把type优化到range及以上即可。

4. possible_key:可能用到的索引。

5. key:实际用到的索引。

6. key_len:索引中使用的字节数(我们通常用这个字段来判断联合索引中实际用了哪些索引列)

7. rows:MYSQL认为要执行查询的行数(估计值)

8. filtered:过滤率,表示返回结果占需要读取行数的百分比,越大越好。

9. extra:额外信息。

  • using index:使用覆盖索引
  • using index condition:使用了索引
  • using where:使用了where条件查询
  • using filesort:order by 没有使用索引,建议优化。

4. 索引失效

1. 最左前缀法则

对于一个联合索引,遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不能跳过索引中的列。

若不遵守这个法则,索引会失效。

2. 对字段做运算、字段类型不匹配

1. 场景1,id+1 = 2,索引失效。

select * from user where id+1 = 2;

2. 场景2,id = '1',索引不失效(id为int)。

select * from user where id = '1';

因为MySQL会自动做隐式转换。

3. 场景3,name = 123,索引失效(name是索引,类型为varchar)

select * from user where name = 123;

explain select * from user where name = 123;

4. 场景4,substring(name, 1, 1),从第一位开始截取1个字符,索引失效。

 select * from user where substring(name, 1, 1) = '张';

3. 模糊匹配

只要%在开头,索引一定失效。%不在开头,在末尾,索引不失效。

 select * from user where name like '%张';

当然,以上SQL也可能会全扫描索引树,即type=index,性能也比较低,和ALL类似。 

4. OR 连接条件

如果or连接条件中有的列不是索引,那么其他索引一律不会被使用。

(注:id和name都是索引,其他非索引)

附上一张图,对比and 和 or 的索引使用情况。

5. 数据分布

如果评估使用索引比全表扫描更慢,则不使用索引。

5. 强制使用索引

语法

# 展示所有索引
show index from table_name;

# 建议MySQL使用索引
select * from user using index(idx_name) where name = '张三';

# 建议MySQL忽略索引
select * from user ignore index(idx_name) where name = '张三';

# 强制MySQL使用索引
select * from user force index(idx_name) where name = '张三';

今天的分享先到这里。

关注我吧!

我是此林,带你看不一样的世界!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode打卡:考场就坐

执行结果:通过 题目: 855 考场就坐 在考场里,有 n 个座位排成一行,编号为 0 到 n - 1。 当学生进入考场后,他必须坐在离最近的人最远的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外&am…

2024.2 ACM Explainability for Large Language Models: A Survey

Explainability for Large Language Models: A Survey | ACM Transactions on Intelligent Systems and Technology 问题 可解释性问题:大语言模型(LLMs)内部机制不透明,难以理解其决策过程,如在自然语言处理任务中&…

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天,在使用Subversion提交代码到服务器时,发现无法提交*.a、*.so等二进制文件,右击这些文件,发现其属性为ignores。     问题原因:SVN的配置文件里,屏蔽了*.a、*.so文件的上传与下载,并把这些…

层序遍历练习

层次遍历 II 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 思路 相对于102.二叉树的层序遍历,就是最后把result数组反转一下就可以了。 C代码&…

京东大数据治理探索与实践 | 京东零售技术实践

01背景和方案 在当今的数据驱动时代,数据作为关键生产要素之一,其在商业活动中的战略价值愈加凸显,京东也不例外。 作为国内领先的电商平台,京东在数据基础设施上的投入极为巨大,涵盖数万台服务器、数 EB 级存储、数百…

【论文阅读笔记】Learning to sample

Learning to sample 前沿引言方法问题声明S-NET匹配ProgressiveNet: sampling as ordering 实验分类检索重建 结论附录 前沿 这是一篇比较经典的基于深度学习的点云下采样方法 核心创新点: 首次提出了一种学习驱动的、任务特定的点云采样方法引入了两种采样网络&…

[AIGC知识] layout理解

前言 要开组会了,随便讲个凑数吧。 参考论文 https://arxiv.org/html/2303.17189? 什么是layout数据? 像下图这样,Layout是每个图片的布局,其中包含一些物体的相应边界框和类别 layout信息如何整合表示并作为条件加入到网络…

【macos java反编译工具Java Decompiler】

mac上能用的反编译工具 https://java-decompiler.github.io/

C#+OpenCv深度学习开发(常用模型汇总)

在使用 OpenCvSharp 结合深度学习进行机器视觉开发时,有许多现成的模型可以使用。以下是一些常用的深度学习模型,适用于不同的机器视觉任务,包括物体检测、图像分类和分割等。 使用示例 在 OpenCvSharp 中加载和使用这些模型的基本示例&…

【生成模型之七】Classifier-free diffusion guidance

论文:classifier-free diffusion guidance 一、Background 分类器引导是一种最近引入的方法,用于在训练后的条件扩散模型中权衡样本丰富度和样本保真度,其思想与其他类型生成模型中的低温采样或截断相同。 分类器引导将扩散模型的分数估计…

【LeetCode每日一题】——415.字符串相加

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 415.字符串相加 四【题目描述】 给定两个字符…

Why SAP TM?

最近发现跟 SAP TM 的集成越来越多了,并且发现这模块还挺大,很难一下子理解。TM(Transportation Management)- 顾名思义就是“运输管理”。起初很难想象为啥 SAP 会浪费大量的时间和精力开发“运输管理”,从而只是为了…

开源鸿蒙 5.0 正式版发布

在2024年的开放原子开发者大会上,开源鸿蒙5.0版本正式发布啦!这个版本是一个比较大的升级,性能和功能都上了一个新台阶,让我们一起来看看都有哪些亮点。 首先,开源鸿蒙这个项目,从最初的700万行代码&#x…

直流有刷电机多环控制(PID闭环死区和积分分离)

直流有刷电机多环控制 提高部分-第8讲 直流有刷电机多环控制实现(1)_哔哩哔哩_bilibili PID模型 外环的输出作为内环的输入,外环是最主要控制的效果,主要控制电机的位置。改变位置可以改变速度,改变速度是受电流控制。 实验环境 【 &…

Odrive源码分析(四) 位置爬坡算法

Odrive中自带一个简单的梯形速度爬坡算法&#xff0c;本文分析下这部分代码。 代码如下&#xff1a; #include <cmath> #include "odrive_main.h" #include "utils.hpp"// A sign function where input 0 has positive sign (not 0) float sign_ha…

电视大全 1.3.8|汇聚多频道资源,秒切换流畅播放

电视大全TV版是一款功能丰富的TV端直播软件&#xff0c;由悠兔电视的同一开发者打造。最新版本更新了更多频道&#xff0c;包括央视、卫视和地方频道等&#xff0c;提供了多线路流畅播放体验&#xff0c;并支持节目回看、线路选择、开机自启等功能。该应用免登录且无购物频道&a…

JAVAweb学习日记(二)JavaScript

一、概念 二、JavaScript引入方式 三、JavaScript书写语法 输出语句&#xff1a; 变量&#xff1a; 数据类型、运算符、流程控制语句&#xff1a; 数据类型&#xff1a; 运算符&#xff1a; 字符串如果是 数字字符构成&#xff0c;先把读到的数字转为数字类型&#xff0c;后续…

深圳龙岗戴尔dell r730xd服务器故障维修

深圳龙岗一台DELL POWEREDGE R730XD服务器系统故障问题处理&#xff1a; 1&#xff1a;客户工厂年底产线整改&#xff0c;时不时的会意外断电&#xff0c;导致服务器也频繁停机&#xff0c; 2&#xff1a;多次异常停机后导致服务器开机后windows server系统无法正常启动了&…

Ansible 批量管理华为 CE 交换机

注&#xff1a;本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地&#xff1a;贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具&#xff0c;AnsibleWorks 成立于 2012 年&a…

2024年Python最新下载安装教程,附详细图文,持续更新

大家好&#xff0c;我是Python老安&#xff0c;今天为大家带来的是Windows Python3下载、安装教程&#xff0c;适用于 Python3 所有版本&#xff0c;包括 Python3.7,Python33.8,Python33.10 等版本。希望对大家有所帮助 Python目前已支持所有主流操作系统&#xff0c;在Linux,…