MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选( 四 )


MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选

文章插图
通过执行show status like 'slow_queries';可以查看慢查询发生的次数,如图所示 。
MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选

文章插图
从慢查询日志中 , 我们也可以看到慢查询发生的详细信息,如图所示,慢查询日志中会记录每次慢查询发生的时间、执行查询时的数据库用户、线程id、查询执行的SQL语句等信息 。
MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选

文章插图
本文作者:张永清, 转载请注明: https://www.cnblogs.com/laoqing/p/16880718.html  来源于博客园 ,本文摘选自《软件性能测试分析与调优实践之路》
MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选

文章插图
在获取到慢查询的SQL语句后,就可以借助数据库的执行计划来对慢查询的SQL语句做进一步分析了 。
 2.2、执行计划
在MySQL中使用explain关键字可以模拟查看数据库是如何来执行SQL查询语句,也就是常说的查看一条SQL语句在数据库中的执行计划 , 如图6-2-8所示就是执行EXPLAIN
本文作者:张永清, 转载请注明: https://www.cnblogs.com/laoqing/p/16880718.html  来源于博客园 ,本文摘选自《软件性能测试分析与调优实践之路》
SELECT * FROM  test.test 后返回的SELECT * FROM  test.test查询的执行计划 。
MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选

文章插图
查询结果返回的字段说明如表所示
表查询结果返回的字段说明
字段
说明
id
查询的顺序编号,表示查询中执行的顺序,id的值越大执行的优先级越高,如果id相同,则从上往下执行
select_type
查询类型,常见查询类型如下:
SIMPLE:表示简单查询方式,SQL语句中一般不会不使用UNION和子查询等
PRIMARY:表示当查询中包含子查询时 , 最外层的查询语句则被标记为primary  。
UNION:查询语句中如果在UNION关键字之后出现了第二个SELECT,则被标记为UNION 。
UNION RESULT:表示查询中有多个查询结果集做UNION操作 。
DEPENDENT UNION:表示子查询中存在UNION操作时,从UNION之后的第二个及之后的SELECT语句都是DEPENDENT UNION 。
DEPENDENT SUBQUERY:子查询中UNION 中第一个SELECT查询为DEPENDENT SUBQUERY 。
SUBQUERY:子查询内层查询的第一个SELECT 。
DERIVED:查询语句中如果from子句的子查询中出现了union关键字则外层select查询将被标记为DERIVED 。
MATERIALIZED:表示子查询被物化 。
UNCACHEABLE SUBQUERY:表示查询结果集无法缓存的子查询,需要逐次查询 。
UNCACHEABLE UNION:表示子查询不可被物化,需要逐次运行
Table
查询涉及的表名或者表的别名
本文作者:张永清 ,  转载请注明: https://www.cnblogs.com/laoqing/p/16880718.html  来源于博客园 ,本文摘选自《软件性能测试分析与调优实践之路》
Type
表示表连接的类型,包括的类型如下所示 , 如下的这些类型的性能从高到低的顺序是:null→system→const→eq-ref→ref→fulltext→ref_or_null→index_merge→unique_subquery→index_subquery→range→index→ALL
null:表示不访问任何的表
system:表示表中只有一条记录,相当于系统表,一般可以认为是const类型的特例 。
const:表示主键或者唯一索引的常量查询 , 表中最多只有1行记录符合查询要求,通常const使用到主键或者唯一索引进行定值查询、常量查询,查询的速度非常快 。
eq_ref:表示join 查询过程中,关联条件字段走主键或者唯一索引 , 出来的行数不止一行 。eq_ref是一种查询性能很高的 join 操作 。
ref:表示非聚集索引的常量查询
fulltext:表示查询的过程中,使用到了 fulltext 索引 。
ref_or_null:跟ref查询类似,在ref的查询基础上会多家一个null值的条件查询
index merg:表示索引联合查询 , 
unique subquery:表示查询走主键的子查询
index subquery:表示查询走非聚集索引的子查询
range:表示查询走索引范围的查询,一般包括:=、<>、>、>=、<、<=、IS NULL、BETWEEN、IN、<=> 等范围 。
index:表示通过索引做扫描查询 。
All:表示全表扫描,性能最差
possible_keys
查询时预计可能会使用的索引,这里说的索引只是可能会用到,实际查询不一定会用到 。

推荐阅读