mysql常见慢sql,MySQL中慢SQL的查询及原因分析
准备数据
查看系统变量
SHOW VARIABLES LIKE 'slow_query%';
slow_query_log:慢sql日志开启状态
slow_query_log_file:慢sql日志存放位置
SHOW VARIABLES LIKE 'long_query_time';
long_query_time:执行超过多少秒才记录日志
修改系统变量
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time=0.001;
执行修改语句后如果再次查询没有生效,重新打开个窗口再次查询就可以了。
测试结果
执行查询语句
select * from student;
slow.log中的记录
select * from student;
# Time: 2020-08-04T06:09:07.716447Z
# User@Host: root[root] @ localhost [::1] Id: 13
# Query_time: 0.001787 Lock_time: 0.000417 Rows_sent: 2 Rows_examined: 1024
SET timestamp=1596521347;
再次测试更新语句
UPDATE student SET `name` = '李四' WHERE id = 999;
> Affected rows: 1
> 时间: 0.004s
发现也被记录了
UPDATE student SET `name` = '李四' WHERE id = 999;
# Time: 2020-08-04T06:25:11.808408Z
# User@Host: root[root] @ localhost [::1] Id: 13
# Query_time: 0.001236 Lock_time: 0.000092 Rows_sent: 356 Rows_examined: 712
SET timestamp=1596522311;
Time:慢sql发生时间
User@Host:客户端用户和IP
Query_time:查询时间
Lock_time:等待表锁的时间
Rows_sent:语句返回的行数
Rows_examined:语句执行期间从存储引擎扫描的行数
sql执行分析
EXPLAIN
Explain 可以获取 MySQL 中 SQL 语句的执行计划,比如语句是否使用了关联查询、是否使用了索引、扫描行数等。可以帮我们选择更好地索引和写出更优的 SQL 。
使用方法:在查询语句前面加上 explain 运行就可以了。
EXPLAIN UPDATE student SET `name` = '李' WHERE id = 999;
EXPLAIN字段详解
列名
描述
id
在一个大的查询语句中每个SELECT关键字都对应一个唯一的id
select_type
SELECT关键字对应的哪个查询的类型
table
表名
partitions
匹配的分区信息
type
针对单表的访问方法
possible_keys
可能用到的索引
key
实际上使用的索引
key_len
实际使用到的索引长度
ref
当使用索引列等值查询时,与索引列进行等值匹配的对象信息
rows
预估的需要读取的记录条数
filtered
某个表经过搜索条件过滤后剩余记录条数的百分比
Extra
一些额外的信息
select_type详解
select_type的值
解释
SIMPLE
简单查询(不使用关联查询或子查询)
PRIMARY
如果包含关联查询或者子查询
UNION
联合查询中第二个及后面的查询
DEPENDENT UNION
满足依赖外部的关联查询中第二个及以后的查询
UNION RESULT
联合查询的结果
SUBQUERY
子查询中的第一个查询
DEPENDENT SUBQUERY
子查询中的第一个查询,并且依赖外部查询
DERIVED
用到派生表的查询
MATERIALIZED
被物化的子查询
UNCACHEABLE SUBQUERY
一个子查询的结果不能被缓存,必须重新评估外层查询的每一行
type详解
查询性能从上到下依次是最好到最差
type的值
解释
system
查询对象表只有一行数据,且只能用于MyISAM和Memory引擎的表,这是最好的情况
const
基于主键或唯一索引查询,最多返回一条结果
eq_ref
表连接事基于主键或非NULL的唯一索引完成扫描
ref
基于普通索引的等值查询,或者表间等值连接
fulltext
全文检索
ref_or_null
表连接类型是ref,但进行扫描的索引列中可能包含NULL值
index_merge
利用多个索引
unique_subquery
子查询中使用唯一索引
index_subquery
子查询中使用普通索引
range
利用索引进行范围查询
index
全索引扫描
extra详解
Extra常见的值
解释
Using filesort
将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序
Using temporary
需要创建一个临时表来存储结构,通常发生对没有索引的列进行GROUP BY时
Using index
使用覆盖索引
Using where
使用where语句来处理结果
Impossible WHERE
对where子句判断的结果总是false而不能选择任何数据
Using join buffer
改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。
Using index condition
先条件过滤索引,再查数据
Select tables optimized away
使用某些聚合函数(比如max、min)来访问存在索引的某个字段
mysql常见慢sql,MySQL中慢SQL的查询及原因分析相关推荐
- mysql sql rowcount_ORACLE中的SQL%ROWCOUNT与MySQL中的ROW_COUNT()的一点异同-阿里云开发者社区...
MySQL的ROW_COUNT()和ORACLE中的SQL%ROWCOUNT函数作用并不完全相同.从作用上来说,两者都是返回前一个SQL进行UPDATE,DELETE,INSERT操作所影响的行数,但 ...
- 【转】在SQL Server中通过SQL语句实现分页查询
在SQL Server中通过SQL语句实现分页查询 2008年01月06日 星期日 12:28 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY ...
- 在SQL Server中使用SQL Coalesce函数
This article explores the string manipulation using SQL Coalesce function in SQL Server. 本文探讨了在SQL S ...
- 12个MySQL慢查询的原因分析
1. SQL 没加索引 很多时候,我们的慢查询,都是因为没有加索引.如果没有加索引的话,会导致全表扫描的.因此,应考虑在 where 的条件列,建立索引,尽量避免全表扫描. 反例: select * ...
- html5不支持的属性,IE9对HTML5中部分属性不支持的原因分析
这篇文章主要为大家介绍了IE9对HTML5中部分属性不支持的原因分析,对于了解IE9与HTML5的应用有一定帮助作用,需要的朋友可以参考下 本文较为详细的分析了IE9对HTML5中部分属性不支持的原因 ...
- mysql查看执行计划_MySql中如何使用 explain 查询 SQL 的执行计划
explain命令是查看查询优化器如何决定执行查询的主要方法. 这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的. 1.什么是MyS ...
- mysql字段重命名_MySQL中使用SQL语句对字段进行重命名
MySQL中,如何使用SQL语句来对表中某一个字段进行重命名呢?我们将使用alter table 这一SQL语句. 重命名字段的语法为:alter table change . 现在我们来尝试把tes ...
- ef 执行mysql语句_在EF中执行SQL语句
一.为什么要在EF中执行SQL语句 使用EF操作数据库,可以避免写SQL语句,完成使用Linq实现,但为什么还要在EF中执行SQL语句呢.如果要写SQL语句,完全可以使用ADO.NET来操作数据库.这 ...
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...
最新文章
- extern “C”的作用详解
- Symantec(VeriSign)SSL证书
- 【Java面经】非科班渣硕面经
- uos命令_【持续更新】UOS个人版实用技巧集锦
- NAT,PAT、OSPF的相关配置
- 【软件】3DsMax2009 下载百度云盘下载(附教程)
- 计算机学课毕业论文,计算机专业毕业论文(精选5篇)
- FPGA图像音频通信接口:VGA
- 学计算机专业需要买电脑吗高中,麻麻 上大学专业需要用 | 买笔记本电脑_笔记本新闻-中关村在线...
- Lesson 10 The loss of the Titanic 内容鉴赏
- python复数类型的虚部通过_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了]...
- 金蝶K3序时簿页面增加物料即时库存显示功能
- AUTOSAR Functional Safety
- 【Unity】Obi插件系列(六)—— Obi Cloth
- 腾讯云服务器搭建网站详细教程(新版)
- C语言:从键盘输入一个整数,分别输出它的个位数、十位数、百位数.....
- JVM垃圾回收器-CMS并发标记清除
- 通达信公式-均线向上
- 中国电信 合约协议 转载
- mac设置开机启动app_Mac App无法启动? 这是解决方法