MySQL性能分析(Explain)

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。

通过Explain,我们可以获取以下信息:

表的读取顺序

哪些索引可以使用

数据读取操作的操作类型

哪些索引被实际使用

表之间的引用

每张表有多少行被物理查询

2. 怎样获取SQL语句的执行计划? Explain + SQL语句 举例 EXPLAIN SELECT * FROM USER;

在这里插入图片描述

执行计划所包含的信息

在这里插入图片描述

3. 执行计划各个名词字段的解释 3.1 Id

select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。

三种情况 (1) ID相同

id相同,执行顺序由上至下。

在这里插入图片描述

(2)ID不同

如果是子查询,id的序号会递增。id越大优先级越高,越先被执行。

在这里插入图片描述

(3)ID既有相同的也有不同的

id如果相同,可以认为是一组,从上往下顺序执行。在所有组中,id值越大,优先级越高,越先执行。

在这里插入图片描述

注意点

id号每个号码,表示一趟独立的查询。一个sql的查询趟数越少越好。

3.2 Select_type

查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。

在这里插入图片描述

Simple:简单的 select 查询,查询中不包含子查询或者UNION。

在这里插入图片描述

Primary:查询中若包含任何复杂的子部分,最外层查询则被标记为Primary。

在这里插入图片描述

Derived:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询, 把结果放在临时表里。

在这里插入图片描述

SubQuery:在SELECT或WHERE列表中包含了子查询。

在这里插入图片描述

Dependent SubQuery:在SELECT或WHERE列表中包含了子查询,用到了IN关键字的。

在这里插入图片描述

Uncacheable SubQuery:不可以使用到缓存的子查询,用到了变量作为筛选条件。

在这里插入图片描述

Union:若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwspjj.html