Explain的解读
Explain
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈
在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL
注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中
id:表示sql中几个select的执行顺序,id越大,执行优先级越高。
select_type:执行的复杂程度,有simple,primary,derived等
table:执行的是哪张表
paririons:表的分区
type:
这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。
依次从最优到最差分别为:system>const>eq_ref>ref>range>index>all
一般来说,得保证查询达到range级别,最好达到ref
possible_keys:可能使用的索引
key:实际使用的索引
key_len:实际使用的索引的长度
ref:这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id)
rows:此次查询结果可能的列数
filtered:符合某条件的记录数百分比。
只要执行两条sql语句,一条有where,一条无where,就可以看出filtered的作用。
Extra:
-
Using index:使用覆盖索引 Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖 Using
-
index condition:查询的列不完全被索引覆盖,where条件中是一个前导列的范围 Using
-
temporary:mysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的,首先是想到用索引来优化 Using
-
filesort:将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一般也是要考虑使用索引来优化的
-
Select tables optimized away:使用某些聚合函数(比如 max、min)来访问存在索引的某个字段是
Explain的解读
Explain
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈
在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL
注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中
id:表示sql中几个select的执行顺序,id越大,执行优先级越高。
select_type:执行的复杂程度,有simple,primary,derived等
table:执行的是哪张表
paririons:表的分区
type:
这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。
依次从最优到最差分别为:system>const>eq_ref>ref>range>index>all
一般来说,得保证查询达到range级别,最好达到ref
possible_keys:可能使用的索引
key:实际使用的索引
key_len:实际使用的索引的长度
ref:这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id)
rows:此次查询结果可能的列数
filtered:符合某条件的记录数百分比。
只要执行两条sql语句,一条有where,一条无where,就可以看出filtered的作用。
Extra:
-
Using index:使用覆盖索引 Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖 Using
-
index condition:查询的列不完全被索引覆盖,where条件中是一个前导列的范围 Using
-
temporary:mysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的,首先是想到用索引来优化 Using
-
filesort:将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一般也是要考虑使用索引来优化的
-
Select tables optimized away:使用某些聚合函数(比如 max、min)来访问存在索引的某个字段是