mysql - explain(执行计划)

1.基础

解释:sql执行计划(是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化
     等场景。)

使用:
	explain + sql (mysql5.6之后开始支持select外delete、insert
	、update)

问题:查看explain时应该关注哪些信息?
     *type:查询类型
     *key:命中的索引
     *rows:扫描的行数
     *extra:额外信息,例如:useing index 使用覆盖索引

概念引入:
    *覆盖索引:表示索引包含了返回所有的列,不需要回表。
    *回表查询:查询返回了非索引字段,需要通过聚集索引(主键索引)找到对应的
             数据行。
    *非回表查询:查询返回索引字段,不需要回表查询。

2.执行结果分析

2.1 id

每个号码表示一趟独立的查询,一个sql的查询趟数越少越好。
如果不同趟数的id一样,则表的读取顺序是从上到下。
如果不同趟数的id不一样,id大的先执行,小的后执行。

2.2 select_type,查询类型,表明是普通查询、联合查询或子查询等

以下为常用的一些类型,以及对应的情况:
*SIMPLE:简单的select查询没有union或子查询,包括单表查询和多表join查询
*PRIMARY:常见于子查询或union查询,最外层的查询被标识为primary
*UNION:union操作之后的select,不依赖于外部查询的结果集。
*SUBQUERY:子查询中的第一个select查询,不依赖于外部查询的结果集
*DEPENDENT SUBQUERY:子查询中第一个select查询,依赖于外部查询结果集
*DERIVED:派生表(临时表),常用于from子句中有子查询的情况。

2.3 table,显示访问的表,当表定义别名后则显示别名。
2.4 type,关联类型,表明了mysql是如何查找符合条件的行的。

*ALL:全表扫描
*ref:索引访问,索引查找

在这里插入图片描述
在这里插入图片描述
2.5 possible_key,显示sql中可能命中的索引,但查询时不一定使用。
2.6 key,显示sql中命中的索引,没有时显示null。
2.7 预计查询到结果需要扫描的数据行数。
2.8 Extra,显示一些额外的信息

定义:用于提供一些额外的信息

*useing index:表示使用了覆盖索引,索引中包含所查询的所有列。
*useing index useing where:
*null:查询的列未被索引覆盖,但是where条件使用了索引,需要通过回表查询
*useing where:提醒我们mysql将用where子句过滤结果集。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值