EXPLAIN分析sql详解--超详细--一篇就够

 

 

id列

id列的编号是select的序列号,有几个select就有几个id,并且id的顺序是按选择出现的顺序增长的.MySQL将选择查询分为简单查询(SIMPLE)和复杂查询(PRIMARY) 。

 

 

2. select_type列

select_type表示对应行是简单还是复杂的查询,如果是复杂的查询,又是上述三种复杂查询中的哪一种。

1)简单:简单查询查询不包含子查询和unionmysql> explainoplect * from film where id = 2;

2)主:复杂查询中最外层的选择

3)子查询:包含在select中的子查询(不在子句中)

4)派生:包含在子句中的子查询.MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义)

 

 

表列

这一列表示解释的一行正在访问哪个表

 

 

4.列出列

这一列表示关联类型或访问类型,即MySQL的决定如何查找表中的行,查找数据行记录的大概范围。

依次从最优到最差分别为:system> const> eq_ref> ref> range> index> ALL

 

 

5. possible_keys列

这一列显示查询可能使用哪些索引来查找。 

解释时可能出现possible_keys有列,而键显示NULL的情况,这种情况是因为表中数据不多,mysql认为索引对此查询帮助不大,选择了全表查询。

 

 

6.关键列

这一列显示MySQL的实际采用哪个索引来优化对该表的访问。

如果没有使用索引,则该列是NULL。如果想强制mysql使用或忽视possible_keys列中的索引,在查询中使用强制索引,忽略索引。

 

 

7. key_len列

这一列显示了MySQL的在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。 

 

 

8.参考列

这一列显示了在键列记录的索引中,表查找值所用到的列或常量,常见的有:常量(常量),字段名(例:film.id)

 

 

9.列列

这一列是MySQL的估计要读取并检测的行数,注意这个不是结果集里的行数。

 

 

10.额外列表

。这一列展示的是额外信息常见的重要值如下: 

使用索引:查询的列被索引覆盖,并且其中筛选条件是索引的前导列,是性能高的表现。一般是使用了覆盖索引(索引包含了所有查询的字段)。对于innodb来说,如果是辅助索引性能会有不少提高

mysql索引需要记住索引最左前缀原则 - 所有的优化其实都是基于这个原则,使用索引,从哪里最左边列开始--mysql会对其中后条件做自动顺序优化 - 按照联合索引进行优化,以及  额外中的使用索引可以看出来做查询时,尽量只查需要的数据,提高索引的使用率,以及按顺序分组这样的函数,也需要注意

你可能感兴趣的:(sql)