MySQL的小知识点(九)

125 阅读2分钟

「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战image.png

MySQL中的explain

上一篇文章回顾到了怎么定位MySQL的慢查询,我们可以通过配置MySQL的慢查询日志支持以获得在实际运行当中的SQL。在我们定位到SQL之后,当然就需要对该SQL进行优化,通常来说,我们需要知道MySQL的语句的一些改写,以及MySQL的执行逻辑。这里,我们需要用explain对SQL进行解释,通过MySQL的输出来定位SQL具体慢在哪里,是没加索引还是索引失效,才能做具体的优化措施。

explain的使用

explain的使用非常简单,如下:

explain select 1 from dual;

通过在sql语句前面添加explain之后,MySQL就会讲执行计划显示到屏幕上,如下: image.png 在上面的查询中,我们没有选择表进行查询,输出了一行信息。需要知道的是,在MySQL中,一个查询如果包含了多个表,那么MySQL就会显示多少行。这里的“表”不仅仅是我们存在磁盘上的物理表,它的含义比较广,它可以是一个子查询,也可以是连表查询的union结果表。接下来看看MySQL输出的列到底指的是什么。

id字段

id是一个编号,代表查询select所属的行,如果是简单的查询,那么表的编号便是顺序编号。

select_type字段

表示查询时简单类型还是复杂的查询类型,如果是简单查询,那么这个字段的输出时SIMPLE。如果是复杂查询,那么有SUBQUERYDERIVEDUNION三种。它们分别代表了子查询、form语句后的子查询和联合查询。

table列

table字段表示当前正在访问的表,通常就是表的名称或者是表的别名(如果有的话)。

type字段

表示MySQL用什么方式访问表中的数据行,这些类型从坏到好依次为:

all index rang ref eq_ref const system

possibie_keys字段

该字段显示了MySQL可以使用的索引。

key字段

这列显示了MySQL决定使用的索引。