Mysql中对于每条执行语句都有一个执行计划,我们用explain+sql语句,就可以查询mysql对该条语句是怎么执行的,查了多少行,是否用到索引等,以此来帮助我们分析sql语句的性能,改善sql语句的编写。如下图:
此片文章来记录一下如何看这一堆东西,每个字段是啥意思。
const:
用主键的等值查询,
唯一二级索引的等值查询(不为null的情况)
注:主键等值是非常快的,直接在聚簇索引中定位,唯一二级索引需要回表一次,也是极快的,但是由于唯一索引不限制null的数量,当索引值为null的情况,会回表多次,所以如果是null值不是const的方式 ,至少是ref方式
ref:
普通二级索引等值查找
注:查找方式就是二级索引找完,找到主键,回表到聚簇索引再查的方式
ref_or_null:有时候我们不仅想找出某个二级索引列的值等于某个常数的记录,还想把该列的值为NULL的记录也找出来
range:索引范围查找
index:查找的值都在二级索引中,直接遍历二级索引的方式
all:不用索引的全表扫描
4.filtered:
如果使用的是索引执行的单表扫描,那么计算驱动表扇出的时候需要估计出满足除使用到对应索引的搜索条件外的其他搜索条件的记录有多少条。
如果使用的是全表扫描的方式执行的单表查询,那么计算驱动表扇出时需要估计出满足搜索条件的记录到底有多少条
5.Extra
Extra列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解MySQL到底将如何执行给定的查询语句
Using index :当我们的查询列表以及搜索条件中只包含属于某个索引的列,也就是在可以使用索引覆盖的情况下,在Extra列将会提示该额外信息。即使用index方式搜索单表的时候
using where:当我们使用全表扫描来执行对某个表的查询,并且该语句的WHERE子句中有针对该表的搜索条件时,在Extra列中会提示上述额外信息