MySQL---SQL优化上(explain分析执行计划、查看SQL的执行效率、定位低效率SQL)

news2025/1/23 7:08:38

1. 查看SQL的执行效率

MySQL 客户端连接成功后,通过 show [session|global] status 命令可以查看服务器状态信息。通

过查看状态信息可以查看对当前数据库的主要操作类型

--下面的命令显示了当前 session 中所有统计参数的值
show session status like 'Com_______';  -- 查看当前会话统计结果
show global  status  like 'Com_______';  -- 查看自数据库上次启动至今统计结果
 
show status like 'Innodb_rows_%’;       -- 查看针对Innodb引擎的统计结果

 2. 定位低效率执行SQL

可以通过两种方式定位执行效率较低的 SQL 语句:

慢查询日志 : 通过慢查询日志定位那些执行效率较低的 SQL 语句。

show processlist:该命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实

时地查看 SQL 的执行情况,同时对一些锁表操作进行优化。

-- 查看慢日志配置信息 
show variables like '%slow_query_log%’; 

-- 开启慢日志查询 
set global slow_query_log=1; 

-- 查看慢日志记录SQL的最低阈值时间 
show variables like 'long_query_time%’; 

-- 修改慢日志记录SQL的最低阈值时间 
set global long_query_time=4;
show processlist; 

1) id列,用户登录mysql时,系统分配的"connection_id",可以使用函数connection_id()查看。

2) user列,显示当前用户。如果不是root,这个命令就只显示用户权限范围的sql语句。

3) host列,显示这个语句是从哪个ip的哪个端口上发的,可以用来跟踪出现问题语句的用户

4) db列,显示这个进程目前连接的是哪个数据库。

5) command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接

(connect)等。

6) time列,显示这个状态持续的时间,单位是秒。

7) state列,显示使用当前连接的sql语句的状态,是一个很重要的列。state描述的是语句执行中

的某一个状态。一个sql语句,以查询为例,可能需要经过copying to tmp table、sorting result、

sending、data等状态才可以完成。

8) info列,显示这个sql语句,是判断问题语句的一个重要依据。

3. explain查看执行计划

通过以上步骤查询到效率低的 SQL 语句后,可以通过 EXPLAIN命令获取 MySQL如何执行

SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。

explain select * from user where uid = 1;

explain select * from user where uname = '张飞';

filtered表示通过查询条件获取的最终记录行数占通过type字段指明的搜索方式搜索出来的记录行数

的百分比。

3.1 id列

id 字段是 select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺

序。id 情况有三种:

① id 相同表示加载表的顺序是从上到下:

explain select * from user u, user_role ur, role r where u.uid = ur.uid and ur.rid = r.rid ;

② id 不同id值越大,优先级越高,越先被执行:

explain select * from role where rid = (select rid from user_role where uid = (select uid from user where uname = '张飞'))

 ③id 有相同,也有不同,同时存在。id相同的可以认为是一组,从上往下顺序执行;在所有的组

中,id的值越大,优先级越高,越先执行:

explain select * from role r , (select * from user_role ur where ur.uid = (select uid from user where uname = '张飞')) t where r.rid = t.rid ; 

3.2 select_type列

表示 SELECT 的类型,常见的取值,如下表所示:

3.3 type列

type 显示的是访问类型,是较为重要的一个指标,可取值为:

 结果值从最好到最坏依次是:system > const > eq_ref > ref > range > index > ALL

3.4 key列 

possible_keys : 显示可能应用在这张表的索引, 一个或多个。

key : 实际使用的索引, 如果为NULL, 则没有使用索引。

key_len : 表示索引中使用的字节数, 该值为索引字段最大可能长度,并非实际使用长度,在不损

失精确性的前提下, 长度越短越好

3.5 extra列

其他的额外的执行计划信息,在该列展示 :

 

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

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

相关文章

【滴水逆向P77】加载进程(PE查看器)应用程序源码解析

在上一篇文章中讲解了通用控件,做了一个基本的加载进程(PE查看器)的应用程序项目,Win32通用控件,加载进程(PE查看器)项目初步,大家如果有不懂的可以去看看,由于不是很了解…

如何搭建一个高效、可靠的积分商城系统?

互联网购物的普及,积分商城系统已经成为商家和消费者之间互动的一种常见方式。它不仅可以帮助商家增加品牌影响力,还可以提高顾客体验,从而增加销售额。下面就如何搭建一个高效、可靠的积分商城系统作一些简单介绍。 第一步:确定需…

MyBatis源码学习三之查询主逻辑

MyBatis源码学习三之查询主逻辑 继续上一章节。 MyBatis的一个主要流程图。从图中可以看出,核心的东西主要集中在3个Handler中。分别是入参处理,执行sql语句处理,以及返回结果处理。 一 实例 Test public static void main(String[] args…

Revit建模|10种方法帮你解决Revit操作卡顿!

大家好,这里是建模助手。 相信各位BIMer在使用Revit建模时,肯定遇到过软件加载慢或者程序未响应的现象。我们经过测试发现,除了硬件配置及软件本身的问题以外,建模习惯及软件使用方法不当也会造成软件卡顿。 以下就是我们总结的…

TPlinker解读

参考: 关系抽取之TPLinker解读加源码分析 TPLinker 实体关系抽取代码解读 实体关系联合抽取:TPlinker TPLinker中文注释版 Tagging TPLinker模型需要对关系三元组(subject, relation, object)进行手动Tagging,过程分为三部分: &…

阿里面试,HR说我不配21K,直接翻脸.....

好家伙,这奇葩事可真是多,前两天和粉丝聊天,他说前段时间面试阿里的测开岗,最后和面试官干起来了。 我问他为什么,他说没啥,就觉得面试官太装了,我说要21K,他说太高了,说…

【全国产龙芯平台】迅为iTOP-LS3A5000_7A2000开发板+银河麒麟操作系统

硬件准备 1.M.2.ssd硬盘(最好大于等于128G); 2.迅为LS3A5000开发板; 3.U盘(需大于8g),制作启动盘使用; 4.hdmi显示器; 5.搭载linux环境的计算机。 安装步骤 1 制作…

【多线程】两阶段终止模式

目录 一、两阶段终止模式说明二、错误思路三、实现思路图四、实现思路五、方法说明六、interrupt实现6.1 代码示例6.2 示例截图 七、volatile实现7.1 代码示例7.2 示例截图 一、两阶段终止模式说明 1.在一个线程t1中优雅地终止另一个线程t2,指终止t2线程前&#xff…

【C++】位图/布隆过滤器+海量数据处理

✍作者:阿润菜菜 📖专栏:C 文章目录 前言一 位图1.位图法介绍2.位图实现的细节 二、布隆过滤器1.布隆过滤器概念2.布隆过滤器实现 三、海量数据处理1. 位图应用2. 哈希切割3. 布隆过滤器 前言 题目 给40亿个不重复的无符号整数,没…

Java

FileOutputStream写数据的3种方式 void write(int b) //一次写一个字节的数据 void write(byte[] b) //一次写一个字节数组数据 void write(byte[] b, int off,int len) //一次写一个字节数组的部分数据 参数一:数组;参数二:起始索引 0;参数三:个数换行: windows:“\r\n” lin…

springboot+java小区社区宽带安装管理系统

本次程序软件的开发的目的就是让使用者可以通过使用该软件提高信息数据的管理效率,同时该程序软件也需要针对不同的操作用户设置对应的功能,因此,此程序的操作流程应该尽量与用户日常操作软件的行为习惯相贴合,另外,程…

分享最强国内免费ChatGPT的镜像网站,记得收藏(2023年更新中)

众所周知的原因,要想在国内使用ChatGPT,肯定是要“折腾一番”的。但是对于绝大多数普通小白,有没有比较容易的方法就用上官方的ChatGPT呢?答案是肯定的,下面就给大家分享几个2023年我正在使用的ChatGPT镜像网址&#x…

Python入门学习

一、执行Python(Hello World)程序 对于大多数程序语言,第一个入门编程代码便是 “Hello World!”,以下代码为使用 Python 输出 “Hello World!” 1.1 创建hello.py文件 1.2 编写程序 #!/usr/bin/python…

听我一句劝,别去外包,干了五年,废了....

先说一下自己的情况,大专生,18年通过校招进入杭州某软件公司,干了接近5年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了5年的功能测试…

Gateway网关参数进行验签POST 包含requestbody 请求体封装

Gateway网关自定义拦截器的不可重复读取数据 特别注意一点, 因为在网关层 拿出 request 流之后,必须重写getbody()方法把所有的参数放进去,否则后面转发的请求无法接收到任何数据, 坑,巨坑,因为版本问题网上很多都不能兼容, 我的springboot环境 依赖包 <parent><gr…

Linux--ServerProgramming--TCP\IP协议族

1.TCP/IP 协议族 1.1 TCP/IP协议族及主要协议 TCP/IP 协议族是一个四层协议系统。自上而下为&#xff08;如下图所示&#xff09;&#xff1a;应用层传输层网络层数据链路层 应用层负责处理应用程序逻辑&#xff0c;在用户空间实现。&#xff08;少数服务器程序在内核中实现。…

如何下载外文期刊文献,怎么下载又快又省力!

文章开头我们先了解一下下面这些查找外文期刊文献的数据库: 1、Web of Science&#xff1a;是获取全球学术信息的重要数据库。它收录了全球13000多种权威的、高影响力的学术期刊&#xff0c;内容涵盖自然科学、工程技术、生物医学、社会科学、艺术与人文等领域。其中以SCIE、S…

OpenCV入门简单的人脸识别项目

在学会图像处理和打开摄像头获取视频流后&#xff0c;就可以开展简单的人脸识别项目。 文章目录 检测人脸区域并绘制矩形多个人脸进行识别绘制五官位置视频检测人脸人脸识别 人脸识别首先需要检测到人脸。 检测人脸区域并绘制矩形 # 加载图片img face_recognition.load_image…

接口全生命周期的生产利器 ApiKit

一、ApiKit 整体介绍&#xff1a; 1、接口管理的需求与现状&#xff1a; 在软件项目研发的过程中&#xff0c;必然存在以下几个需求&#xff1a; API 接口文档的管理&#xff0c;常用的解决方案有 Swagger API 接口的调试&#xff0c;常用的解决方案有 Postman API 接口的自…

Java——网络编程套接字

目录 一、网络编程基础 1.1 为什么需要网络编程&#xff1f;——丰富的网络资源 二、什么是网络编程? 三、网络编程中的基本概念 3.2 请求和响应 3.3 客户端和服务端 常见的客户端服务端模型 四、Socket套接字 五、通信模型 5.1 Java数据报套接字通信模型 5.2 Java流…