面试官:Mysql中的 explain 知多少?

654 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 7 天,点击查看活动详情

哈喽,大家好,我是二毛。

工作中打交道最多的中间件恐怕就是 Mysql 了,平时写的最多的也是 SQL 语句。一条 SQL 语句执行的快慢,直接决定了接口性能。

那么,如果一条语句执行很慢,你又是如何去做判断并进行性能优化的呢?

其实可以使用 explain 可以模拟优化器执行SQL查询语句,从而知道MySQL怎么处理你的SQL语句的,分析你的查询语句和表结构的性能瓶颈。

explain select id from test;

Explain有哪些信息

Explain 执行计划包含字段信息如下:分别是 idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra 12个字段。

其中:

  • id:表示查询中执行select子句或者操作表的顺序,id的值越大,代表优先级越高,越先执行
  • select_type:表示 select 查询的类型,主要是用于区分各种复杂的查询,例如:普通查询联合查询子查询等。
  • table: 查询的表名,并不一定是真实存在的表,有别名显示别名,也可能为临时表。
  • partitions:查询时匹配到的分区信息,对于非分区表值为NULL,当查询的是分区表时,partitions显示分区表命中的分区情况。
  • type:重要。查询使用了何种类型,它在 SQL优化中是一个非常重要的指标,下文将会展开来说。
  • possible_keys: 表示在MySQL中通过哪些索引,能让我们在表中找到想要的记录,一旦查询涉及到的某个字段上存在索引,则索引将被列出,但这个索引并不定一会是最终查询数据时所被用到的索引
  • key: 区别于possible_keys,key是查询中实际使用到的索引,若没有使用索引,显示为NULL
  • key_len: 表示查询用到的索引长度(字节数),原则上长度越短越好。
  • ref: 可以忽略。
  • rows:以表的统计信息和索引使用情况,估算要找到我们所需的记录,需要读取的行数。
  • filtered:这个是一个百分比的值,表里符合条件的记录数的百分比。简单点说,这个字段表示存储引擎返回的数据在经过过滤后,剩下满足条件的记录数量的比例。
  • Extra:重要。不适合在其他列中显示的信息,Explain 中的很多额外的信息会在 Extra 字段显示。

最后

这篇文章,简单介绍了下 Explain 执行计划各个列的含义,里面有些非常重要的列,如 type,Extra 等里的参数值比较多,将在下篇文章中介绍,敬请期待。

我是二毛,我们下期再见~