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会对其中后条件做自动顺序优化 - 按照联合索引进行优化,以及 额外中的使用索引可以看出来做查询时,尽量只查需要的数据,提高索引的使用率,以及按顺序分组这样的函数,也需要注意