简介:java系列技术分享(持续更新中…)
初衷:一起学习、一起进步、坚持不懈
如果文章内容有误与您的想法不一致,欢迎大家在评论区指正
希望这篇文章对你有所帮助,欢迎点赞 收藏 ⭐留言更多文章请点击
explain关键字可以模拟MySQL优化器执行SQL语句,可以很好的分析SQL语句或表结构的性能瓶颈。
explain的使用很简单,只需要在目标sql前加上这个关键字就可以了
-- explain查询sql执行计划
EXPLAIN SELECT * FROM student
执行explain会产生以下11列内容,如下:
列号 | 列 | 说明 |
---|---|---|
1 | id | select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 |
2 | select_type | 查询类型 |
3 | table | 显示这一步操作所访问的数据是关于哪一张表的。 |
4 | partitions | 匹配的分区 |
5 | type | /访问的类型 |
6 | possible_keys | 显示可能 应用在这张表中的索引,一个或多个,但不一定实际使用到 |
7 | key | 实际使用到的索引 ,如果为NULL,则没有使用索引 |
8 | key_len | 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度 |
9 | ref | 显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查找索引列上的值 |
10 | rows | 根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数 filtered //查询的表行占表的百分比 |
11 | filtered | 查询的表行占表的百分比 |
12 | Extra | 包含不适合在其它列中显示但十分重要的额外信息 |
select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
SQL执行的顺序的标识,SQL从大到小的执行id相同时,执行顺序由上至下
查询中每个select的类型,有以下几种类型:
SIMPLE
PRIMARY
SUBQUERY
不依赖
于外部查询DEPENDENT SUBQUERY
依赖
于外部查询UNCACHEABLE SUBQUERY
UNION
UNION RESULT
DEPENDENT UNION
DERIVED
最好到最差
NULL>system>const>eq_ref>ref>ref_or_null>index_merge>range>index>ALL
NULL
explain select min(id) from table1;
system (单行表)
explain select * from (select count(id) from table1) t。
const (唯一键读取)
eq_ref (唯一键联表查询)
ref (非唯一性索引扫描)
ref_or_null
index_merge
range (索引范围扫描)---比如使用>或<查找东西时发生的情况
index(全索引扫描----比ALL更好,因为索引一般小于表数据
ALL(全表扫)----比较糟糕, 应该尽量避免
表示数据来自哪张表
显示可能应用在这张表中的索引,一个或多个查询涉及到的字段若存在索引,则该索引将被列出,但不一定被实际使用
实际使用到的索引,如果为NULL,则没有使用索引查询中若使用了覆盖索引(查询的列刚好是索引),则该索引仅出现在key列表
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度在不损失精确度的情况下,长度越短越好key_len显示的值为索引字段最大的可能长度,并非实际使用长度即key_len是根据定义计算而得,不是通过表内检索出的
哪些列或常量被用于查找索引列上的值
根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数
匹配的分区
它指返回结果的行占需要读到的行(rows列的值)的百分比
该列包含不适合在其它列中显示,但十分重要的额外信息
Using filesort
Using temporary
impossible where
Select tables optimized away
no matching row in const table
using index
using where
range checked for eache record(index map:N)
Using index for group-by
using index condition
using index ; using where
相对
重要的属性:id、type、key、ref、extra。如果需要对sql进行优化的话,着重关注这几个就可以。