概述

explain 关键字可以模拟执行 sql 查询语句,输出执行计划,分析查询语句的执行性能

使用方式如下:explain + sql

explain select * from t1

执行计划各字段含义

1. id

  • 如果 id 序号相同,从上往下执行
  • 如果 id 序号不同,序号大先执行
  • 如果两种都存在,先执行序号大,在同级从上往下执行
  • 如果显示 NULL,最后执行,表示结果集,并且不需要使用它来进行查询

2. select_type

表示查询的类型,取值有如下:

SIMPLE:简单的 select 查询,不包含子查询或者 UNION

PRIMARY:复杂查询中最外层查询,比如使用 union 或 union all 时,id 为 1 的记录 select_type 通常是 primary

SUBQUERY:指在 select 语句中出现的子查询语句,结果不依赖于外部查询(不在 from 语句中)

DEPENDENT SUBQUERY:指在 select 语句中出现的查询语句,结果依赖于外部查询

DERIVED:derived 称为派生表,在 FROM 子句的查询语句,表示从外部数据源中推导出来的,而不是从 SELECT 语句中的其他列中选择出来的

UNION:若第二个 SELECT 出现在 UNION 之后,则被标记为 UNION;若 UNION 包含在 FROM 子句的子查询中,那么第一个 SELECT 将被标记为 DERIVED

UNION RESULT:UNION 的结果

DEPENDENT UNION:当 union 作为子查询时,其中第一个 union 为 dependent subquery,第二个 union 为 dependent union

3. table

表示当前行正在访问的表

4. type

表示查询使用的类型,性能由好到坏依次是:system > const > eq_ref > ref > range > index > all,一般来说能达到 range 级别,最好能达到 ref 级别

system:表只有一行(相当于系统表),是 const 类型的特例

const:针对主键或唯一索引的等值查询扫描,只返回一行数据

eq_ref:基于主键或唯一索引连接两个表,对于每个索引键值,只有一条匹配记录,被驱动表的类型为 eq_ref,这种类型只出现在 join

ref:非唯一性索引扫描,返回匹配多个符合条件的行

range:范围扫描,检索指定范围的行,一般出现在 where 语句出现 between、< 、>、in 等的查询

index:只遍历索引树即可找到匹配的数据,比如下例中 user_id 就是 orders 表的索引

all:遍历全表找到匹配的数据

5. possible_keys

显示可能使用到的索引,实际不一定被使用

6. key

实际使用的索引

7. key_len

索引使用的字节数,可通过该列计算查询中使用的索引的长度,主要用于联合索引

比如现有 users 表,执行以下 sql,该表有为 name 和 email 字段设置联合索引 index_name_email

explain select * from users where name = "张三" and email = "xxx@qq.com"

执行结果如下:

users 表结构如下:

name 和 email 字段都为 varchar,一个字符占 3 个字节,所以 key_len = 50 * 3 + 2 + 1 + 100 * 3 + 2 = 455,其中 varchar 需要额外占用 2 个字节,允许 NULL 值额外占用 1 个字节

据此我们可以得知 index_name_email 中的 name 和 email 字段都被使用了

8. ref

表示哪些列或常量被用于匹配用到的索引

9. rows

根据表统计信息及索引选用情况,估算出找到所需的记录所需要读取的行数,值越小越好,它不是结果集中的行数

10. filtered

表示某个表经过条件过滤之后,剩余记录条数的百分比

11. Extra

包含一些重要的额外信息

Using index:出现索引覆盖,即查询和检索条件的列都在使用的索引里面,不需要回表

Using where:不通过索引查询需要的数据

下例中 total_price 字段不存在索引

Using index condition:表示查询列不被索引覆盖,where 条件中是一个索引范围查找,过滤完索引后回表找到所有符合条件的数据行

Using filesort:当查询包含排序操作,又无法利用索引完成排序操作时,数据较少在内存排序,数据较多则在磁盘排序

Using temporary:在做如去重、排序和分组等功能时,如果不能有效利用索引,就需要建立临时表来完成

MySQL Explain 关键字详解的更多相关文章

  1. 转载:MySQL EXPLAIN 命令详解学习

    转载自:https://blog.csdn.net/mchdba/article/details/9190771 MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查 ...

  2. MySQL EXPLAIN 命令详解

    MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...

  3. 2.mysql explain命令详解

    EXPLAIN详解 SQL编写和解析 编写过程 select-distinct-from-join-on-where-group by-having-order by-limit- 解析过程 from ...

  4. mysql explain参数详解

    主要对几个参数做一些记录 type:显示的是访问类型 从最好到最差的连接类型为:const.eq_reg.ref.range.index和ALL 至少要达到range,基本是ref  最好是const ...

  5. mysql explain type详解

    本文转载自最官方的 mysql explain type 字段解读 读了很多别人的笔记都杂乱不堪,很少有实例,什么都不如原装的好,所以当你读到我的笔记的时候如果觉得说的不明白,最好参考官方的手册. 我 ...

  6. mysql explain执行详解

    1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.2).select_type列常见的有:A:simple:表示不 ...

  7. mysql explain语法详解--优化你的查询

    原文地址:http://blog.csdn.net/zhuxineli/article/details/14455029 explain显示了mysql如何使用索引来处理select语句以及连接表.可 ...

  8. MySQL Explain命令详解--表的读取顺序,数据读取操作的类型等

    表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) 不损失精确 ...

  9. MySQL EXPLAIN 命令详解学习

    http://blog.csdn.net/mchdba/article/details/9190771

  10. mysql中文、英文别名排序问题,order by 关键字详解

    order by 关键字详解:   SELECT intcode AS 商品编码, product_title AS 名称, retailprice AS 零售价, purchaseprice AS ...

随机推荐

  1. [Caddy2] The Caddy Web Server 常见 Caddyfile 模式

    Caddyfile 是 JSON 配置的易用写法,支持通常用的功能,完整功能还是需要 JSON 配置的. 以下适用于 Caddy2 版本的配置. 静态文件服务器 example.com root * ...

  2. IIncrementalGenerator 解析 ValueTuple 的定义

    本文将告诉大家如何在分析器里面解析代码里面对于 ValueTuple 的定义,包括如何获取 ValueTuple 里面的 Item 的类型和命名 开始之前先创建一个用来被分析的项目,在这个项目里面定义 ...

  3. 和 ChatGPT 聊聊 .NET 编译和执行背后的那些事儿

    1 .NET 编译.构建.执行涉及到哪些概念 在 .NET 编译.构建和执行中,涉及到以下概念: C# 或 Visual Basic .NET 等编程语言: 这些是 .NET Framework 使用 ...

  4. netcore热插拔dll

    项目中有有些场景用到反射挺多的,用到了反射就离不开dll的加载.此demo适用于通过反射dll运行项目中加载和删除,不影响项目. ConsoleApp: 1 using AppClassLibrary ...

  5. vue-在公共icon封装组件里使用svg图标

    1.安装svg-sprite-loader.package.json:"svg-sprite-loader": "^3.9.2", 2.build/webpac ...

  6. vue-单独引入css文件,设置公共的css样式或者修改默认的vant,mint样式

    1.css文件夹下新建global.css文件并粘贴复制: ======================= :root{     --bgColor : #d3252a;     --pinkColo ...

  7. 【保姆级Python入门教程】马哥手把手带你安装Python、安装Pycharm、环境配置教程

    您好,我是 @马哥python说 ,一枚10年程序猿. 我的社群中小白越来越多,咨询讨论的问题很多集中在python安装上,故输出此文,希望对大家起步有帮助. 下面开始,先安装Python,再安装py ...

  8. linux终端显示git分支的配置

    1.查看现有配置 $ echo $PS1 2.显示git分支 打开./.bashrc文件 添加以下几行命令: git_branch() { git branch 2> /dev/null | s ...

  9. 纯JavaScript实现“返回顶部”和“评分”,“分享”等小功能

    1.返回顶部功能的实现 <!DOCTYPE html> <html> <head> <title>Back to Top</title> & ...

  10. Vben-admin---ApiSelect Invalid prop: type check failed for prop "onUpdate:value". Expected Function, got Array

    在basicFrom组件里添加一个ApiSelect, <template #localSearch="{ model, field }"> <ApiSelect ...