在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。
explain是什么
使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是结构的性能瓶颈。
explain能干什么
explain怎么玩
explain + SQL语句
包含的信息:
①id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
②select_type:查询的类型,主要用于区别普通查询、联合查询、子查询等的复杂查询
select_type种类:
select_type各字段代表的含义:
③table:显示这一行的数据是关于哪张表的。
④type种类(重要):显示查询使用了何种类型,从最好到最差依次是:system>const>eq_ref>ref>range>index>ALL
⑤possible_keys:显示可能应用在这张表中的索引,一个或多个。查询涉及的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。
⑥key(重要):实际使用的索引。如果为null则没有使用索引。(查询中若使用了覆盖索引,则索引和查询的select字段重叠,在Extra中显示Using index)
⑦key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。在不损失精确性的情况下,长度越短越好。(key_len显示的值为索引最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)
⑧ref:显示索引哪一列被使用了,如果可能的话,是一个常数。那些列或常量被用于查找索引列上的值
⑨rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数。
⑩Extra(重要):包含不适合在其他列中显示但十分重要的额外信息。