数据库之explain

使用explain可以查看sql语句的执行计划,查看是否触发索引,有助于我们优化SQL语句和索引。

使用explain解析一条sql语句会出现以下几个属性:

接下来我们逐一解释这些属性的意义。

id

id代表SQL语句的执行顺序。id越大,优先级越高,越先被执行。id也可以相同,此时执行顺序由上至下。

select_type

select_type表示查询类型。包括如下几个值:

  • SIMPLE:表示简单查询,不包含union和子查询。
  • PRIMARY:表示主查询,查询语句中如果包含子查询,其最外层查询为主查询。
  • SUBQUERY:表示select子句或where子句中的子查询。
  • DERIVED:表示from子句中的子查询。
  • UNION:union语句后的select语句被标记为UNION。
  • UNION RESULT:从union获取结果的select。

table

表示数据来源的表。

partitions

表示匹配的分区。

type

表示访问类型。包括如下几个值:

  • system:表只有一行记录,const类型的特例。
  • const:使用到了primary key或unique索引,只匹配到了一行数据,速度很快。
  • eq_ref:除以上两个类型外的最好联接类型,表示联表查询时,按联表的主键或唯一键联合查询。
  • ref:表示非唯一性扫描,即没有使用primary key或unique索引,可能会找到多个符合条件的行。
  • ref_or_null:类似ref,但可以搜索值为null的行。
  • index_merge:使用了索引合并的优化方法,索引合并是指对多个索引分别进行条件扫描然后将它们各自的结果合并。
  • range:表示有范围的索引扫描,一般是where子句中出现between、<、>、in等关键字。
  • index:与all一样都是读全表,但index是从索引中读取,all是从硬盘中读取,通常比all快,因为索引文件比数据文件小。
  • all:全表扫描。

possible_keys

此次查询可能涉及到的索引。

key

实际使用到的索引。

key_len

索引使用的字节数。

ref

显示索引的哪一列被使用。

rows

执行查询读取的行数,数值越大表示查询效率越差。

filtered

查询的表行占表的百分比。

Extra

包含不适合在其它列显示但十分重要的信息。包含以下几个值:

  • Using filesort:表示MySQL会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,MySQL中无法利用索引完成的排序操作称为“文件排序”。
  • Using temporary:表示使用了临时表存储中间结果,常见于order by和group by子句。
  • Using index:表示select子句中使用了覆盖索引。
  • Using where:表示使用了where条件。
  • Using join buffer:表示使用了连接缓存。
  • impossible where:表示where子句的值总是false。
  • distinct:表示发现第一个匹配行后不再继续搜索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值