MySQL慢查询怎么办?需要关注Explain的哪些关键字?

news2024/11/14 13:53:18

目录

  • 1-引言:什么是慢查询
    • 1-1 慢查询定义
    • 1-2 为什么排查慢查询
  • 2-核心:慢查询排查
    • 2-1 慢查询定位
    • 2-2 慢查询解决
      • 2-2-1 Explain 排查慢查询
      • 2-2-2 Explain 重点关键字
  • 3-总结:慢查询知识点小结


image.png


1-引言:什么是慢查询

1-1 慢查询定义

  • 定义:在MySQL中,慢查询是指执行时间超过预设阈值的SQL语句。这种查询的执行时间长,效率低下,通常需要优化。
  • 阈值:慢查询日志通过 long_query_time 变量定义超时时间。任何查询执行时间超过这个值的,都会被记录到慢查询日志中。
  • 根据业务场景的不同,这个阈值的设定是不一样的,如果业务内部设置慢查询的阈值为 1s,则一条 SQL 语句在执行的过程中超过了 1 秒,则会被记录为慢查询。

1-2 为什么排查慢查询

提升应用性能

  • 慢查询是影响应用程序性能的主要瓶颈之一。查询执行时间长会直接导致用户体验差,特别是在数据驱动的应用中,响应时间是用户满意度的关键因素。通过优化慢查询,可以显著减少请求的响应时间,提高整体应用性能。

避免潜在的锁竞争和死锁

  • 慢查询可能会持有长时间的锁,增加死锁的风险,尤其是在涉及多个表或多行的复杂查询中。这种锁竞争会影响数据库的并发处理能力,造成更多的性能问题。优化慢查询有助于减少锁的持有时间,提高并发性能。

2-核心:慢查询排查

2-1 慢查询定位

慢查询定位方式可以通过 配置MySQL自带的慢查询日志、

  1. 根据 位于 MySQL 安装目录下 etc 或 conf 中的 MySQL 的配置文件 my.ini (或 my.cnf)
  2. 在配置文件中启用慢查询日志:找到或添加配置项,并取消注释
# 启用慢查询日志,记录执行时间超过长查询时间的查询。
slow_query_log = 1

# 指定存储慢查询日志的文件路径。
slow_query_log_file = /path/to/slow-query.log

# 设置被认为是慢查询的阈值(单位:秒)。
long_query_time = 1
  1. 重启MySQL服务:保存配置文件并重启MySQL服务,以使得配置文件生效
sudo systemctl restart mysql
  1. 查看慢查询日志内容:根据上述配置文件的路径,查看慢查询日志(Linux)
vim /path/to/slow-query.log

慢查询日志示例:

# Time: 2024-04-18T08:22:34.983941Z
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 11.293402  Lock_time: 0.000137 Rows_sent: 45  Rows_examined: 89723
SET timestamp=1650277354;
SELECT * FROM orders WHERE date BETWEEN '2024-04-01' AND '2024-04-18';
  • Time:
    • 日志记录的时间戳,指示查询执行的具体时间。
  • User@Host:
    • 执行查询的数据库用户及其来源主机。
  • Query_time: 查询执行的总时间,单位是秒;
  • Lock_time:查询在等待锁的时间,单位是秒;
  • **Rows_sent:**查询结果发送给客户端的行数。;
  • Rows_examined:查询过程中检查的行数,反映了查询的负载。
  • SET timestamp:设置查询发生时间的时间戳,有助于复现查询环境。
  • SQL Query:
    • 实际执行的SQL查询语句。

2-2 慢查询解决

慢查询的常见原因:

  • 索引缺失或不适当:如果查询中涉及的表缺少适当的索引,数据库需要进行全表扫描来查找数据,这通常是导致查询变慢的主要原因之一。
  • SQL语句问题:复杂的查询、过度使用子查询、错误的连接(例如笛卡尔连接)或未能有效使用MySQL的优化器都可能导致性能问题。

2-2-1 Explain 排查慢查询

Explain 语句的作用

在MySQL中,EXPLAIN语句是一种非常有用的工具,用于帮助开发者和数据库管理员理解MySQL是如何执行一个特定的查询语句的。通过使用EXPLAIN,你可以获得关于SQL执行计划的详细信息,这包括查询如何使用索引,以及在查询过程中涉及哪些表和操作。这些信息对于优化查询性能至关重要。

  • 通过explain关键字可以查看sql语句的执行计划来评估sql语句的性能!

2-2-2 Explain 重点关键字

主要关注** type、key、rows、Extra **这四个字段
**① type关键字 **表示访问方法,性能由好到差:NULLsystemconsteq_refrefrangeindexall

  • 越往前越好,一般业务中不会出现优化到NULL的情况
  • 根据主键/唯一索引进行访问,一般会出现const
  • 根据非唯一性的索引进行访问时,一般会出现ref
  • index:表示使用了索引,但是要对整个索引树进行扫描…虽然比 all 好一点,但性能也不是特别好!
  • all:全表扫描…

Key关键字:实际用到的索引,如果为 NULL 则表示没有使用索引
rows 关键字:MySQL认为必须要执行查询的行数,在 InnoDB引擎的表中,是一个估计值,可能并不总是准确的。
Extra 关键字:Extra列提供了关于MySQL如何执行查询的额外信息。这些信息对于理解查询执行的具体细节以及优化查询性能非常有用。Extra列中的信息可以帮助你识别查询中的潜在性能问题,例如是否进行了文件排序、是否使用了临时表、是否利用了索引等。

  • Extra 关键字中各个结果含义
  • 1、using index:满足了覆盖索引,不需要回表.直接返回给server层
  • 2、using index condition
    • 使用了索引下推…搜索的列存在于索引列,但是无法为其生产扫描区间…
    • 有些搜索条件虽然包含了索引列,但是无法为其生成扫描区间.(索引下推优化…也会有回表,只是减少回表次数…)
  • 3、using where
    • 有搜索条件必须要在server进行判断(过滤),而不能直接在存储引擎层基于索引就完成所有判断.
    • 在server还要完成对别的条件的过滤!
  • 4、using filesort
    • 无法在索引下直接完成排序,而是需要开辟新的内存空间来进行排序!
  • 5、using join buffer
    • 联表查询时,采用了基于块的循环嵌套连接算法来优化.开辟一个join buffer来存放驱动表中查询出来
    • 符合条件的记录,减少对被驱动表的访问次数.没有加索引…
  • 6、using temporary
    • 使用了临时表,性能并不好!

3-总结:慢查询知识点小结

MySQL慢查询怎么办?需要关注Explain的哪些关键字?
在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabelMe数据集格式问题

注意图片的通道数,之前我们都说RGB,但是在这里要看图片位深。 图像是rgba四个通道的,第四个通道是透明通道。 注意png格式的不只是文件名后缀是 .png ,也可能是后缀名是 .jpg 但是图片里面的深度是为32的,常规的后缀是…

如何使用JSONB类型在PostgreSQL中存储和查询复杂的数据结构?

文章目录 解决方案1. 创建包含JSONB列的表2. 插入JSONB数据3. 查询JSONB数据4. 创建索引以优化查询性能 示例代码结论 在PostgreSQL中,JSONB是一种二进制格式的JSON数据类型,它允许你在数据库中存储和查询复杂的JSON数据结构。与普通的JSON类型相比&…

Matlab新手快速上手2(粒子群算法)

本文根据一个较为简单的粒子群算法框架详细分析粒子群算法的实现过程,对matlab新手友好,源码在文末给出。 粒子群算法简介 粒子群算法(Particle Swarm Optimization,PSO)是一种群体智能优化算法,灵感来源于…

flutter 实现表单的封装包含下拉框和输入框

一、表单封装组件实现效果 //表单组件 Widget buildFormWidget(List<InputModel> formList,{required GlobalKey<FormState> formKey}) {return Form(key: formKey,child: Column(children: formList.map((item) {return Column(crossAxisAlignment: CrossAxisAlig…

【BUG】Hexo|GET _MG_0001.JPG 404 (Not Found),hexo博客搭建过程图片路径正确却找不到图片

我的问题 我查了好多资料&#xff0c;结果原因是图片名称开头是_则该文件会被忽略。。。我注意到网上并没有提到这个问题&#xff0c;遂补了一下这篇博客并且汇总了我找到的所有解决办法。 具体检查方式&#xff1a; hexo生成一下静态资源&#xff1a; hexo g会发现这张图片…

配置静态路由实现全网互通

1、实验环境 如图下所示&#xff0c;三台路由器R1&#xff0e;R2&#xff0c;R3两两互连&#xff0c;每台路由器上都配置了Loopback地址模拟网络环境。 2、需求描述 需要在三台路由器上配置静态路由&#xff0c;以实现各网段之间的互通。 若要实现全网互通,必须明确如下两个问…

【GlobalMapper精品教程】075:将影像的颜色赋予点云实现点云真彩色

文章目录 一、加载点云与影像数据二、将影像色彩赋予点云三、保存色彩点云四、注意事项一、加载点云与影像数据 加载本实验数据(data075.rar)中的影像、点云数据,并用Globalmapper提供的卷帘工具(快速浏览图像)查看: 启动卷帘工具,左右拖动实现卷帘效果: 影像VS点云:…

【硬十宝典】——1.4【基础知识】电源完整性——理解与设计

定义&#xff1a; 电源完整性&#xff08;Power integrity&#xff09;简称PI&#xff0c;是确认电源来源及目的端的电压及电流是否符合需求。 电源完整性在现今的电子产品中相当重要。有几个有关电源完整性的层面&#xff1a;芯片层面、芯片封装层面、电路板层面及系统层面。…

EelasticSearch使用

1. Easy-ES介绍 Easy-Es 2. 导入依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions>//排除框架中原有的依赖包<exclusion><groupId>org.elast…

Elasticsearch:(二)2.安装kibana

1.环境安装介绍: 安装java环境安装Elasticsearch安装kibana安装Elasticsearch-head插件 本节文章主要讲解kibana的安装。 2.下载 下载Elasticsearch对应的版本,参考官方自身产品兼容版本:支持一览表 | Elastic 下载地址:Kibana 7.17.20 | Elastic Kibana 7.17.20 | Ela…

机器学习与深度学习 --李宏毅(笔记与个人理解)Day 20

Day 20 RNN 2 实际使用和其他应用 在实际的学习&#xff08;training&#xff09;过程中是如何工作的&#xff1f; step 1 Loss step 2 training Graindent Descent 反向传播的进阶版 – BPTT CLIpping 设置阈值~ 笑死昨天刚看完关伟说的有这玩意的就不是好东西 Why&#xff1…

FastChat启动与部署通义千问大模型

FastChat简介 FastChat is an open platform for training, serving, and evaluating large language model based chatbots. FastChat powers Chatbot Arena, serving over 10 million chat requests for 70 LLMs.Chatbot Arena has collected over 500K human votes from sid…

详细剖析多线程4----锁策略(八股文/面试常考)

文章目录 前言一、常见锁策略(八股文)1.1乐观锁和悲观锁1.2轻量级锁和重量级锁1.3自旋锁和挂起等待锁1.4普通互斥锁和读写锁1.5公平锁和非公平锁1.6可重入锁和不可重入锁1.7总结 二、synchronized内部原理三、CAS四、JUC(java.util.concurrent) 的常见类4.1Callable 接⼝4.2Ree…

基于SpringBoot+Vue七匹狼商城系统的设计与实现

系统介绍 近年来随着社会科技的不断发展&#xff0c;人们的生活方方面面进入了信息化时代。计算机的普及&#xff0c;使得我们的生活更加丰富多彩&#xff0c;越来越多的人使用通过网络来购买各类的商品。早期商品的销售和购买都是通过实体店&#xff0c;这种购买方式需要耗费…

openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置

文章目录 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置267.1 操作步骤 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置 本章节主要介绍openGauss数据库内核基于鲲鹏服务器和openE…

[jinja2]模板访问对象属性

甚至可以用. 访问字典 .访问一般用得是最多的

R绘图--峰峦图/山脊图/ggridges包

山脊图是部分重叠的线图&#xff0c;可产生山脉的印象。它们对于可视化分布随时间或空间的变化非常有用。 绘图 加载包和数据 # install.packages("ggridges") # 加载包 library(ggplot2) library(ggridges) library(viridis) library(tidyverse)# 准备输入数据 d…

Java发送邮件 启用SSL

使用的maven依赖: <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.4.7</version> </dependency> 配置文件mail.properties如下: # 邮箱配置 email.username=your-email@exa…

const成员函数 以及 取地址及const取地址操作符重载

目录 const成员函数 结论&#xff1a; 取地址及const取地址操作符重载 const成员函数 将const 修饰的 “ 成员函数 ” 称之为 const成员函数 &#xff0c; const 修饰类成员函数&#xff0c;实际修饰该成员函数的&#xff08;*this&#xff09; &#xff0c;表明在该成员函数…