首页 > 数据库 >MySQL学习——执行计划

MySQL学习——执行计划

时间:2022-09-21 15:44:23浏览次数:64  
标签:数据 查询 学习 索引 MySQL 执行 ref

  MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的,这将有利我们做代码的优化。

1、MySQL查询执行过程

  • 客户端向MySQL服务器发送一条查询请求
  • 服务器首先检查查询缓存,若缓存中存在,则立刻返回存储在缓存中的结果。否则进入下一阶段
  • 服务器进行SQL解析、预处理、再由优化器生成对应的执行计划
  • MySQL根据执行计划,调用存储引擎的API来执行查询
  • 将结果返回给客户端,同时缓存查询结果

2、启动执行计划

EXPLAIN SELECT 投影列 FROM 表名 WHERE 条件 

3、EXPLAIN 列的解释

  我们执行上述语句之后,会得到如下结果,下面我们将来解释每一个字段代表的含义。

  3.1、ID

  查询的执行顺序:

  • id值相同时从上向下执行。
  • id值相同的视为同一组。
  • 如果是子查询,id值会递增,id值越高则有限制越高。

 3.2、select_type

SIMPLE:表示当前查询中不包含子查询或者UNION

PRIMARY:当查询中包含任何复杂的子部分,最外层的查询被标记成primary

DERIVED:在from中包含的子查询被标记为derived

SUBQUERY:在select或者where中包含了子查询,则子查询被标记为subquery

UNION:两个select查询时前一个标记为PRIMARY,后一个标记为UNION。union出现在from子查询中,则外层select标记位PRIMARY,union的第一个查询标价为DERIVED

UNION RESULT:从union表获取结果的select被标记为union result

 3.3、table

  显示这一行的数据时关于那张表的,如果这个表在查询中给了别名,则这里显示的就是表的别名。

 3.4、partitions

  如果MySQL中做了分区了,则会表示数据来源于那个分区。

 3.5、type

  这是非常重要的一列,表示了当前的连接使用了那种类型(消耗的代价),从查询效率从最好到最差的连接类型是:system > const > eq_ref > ref > range > index > ALL。

  • system :表中只有一行数据。属于const的特例。如果物理表中就只有一行数据则这里会显示ALL。
  • const :查询结果最多有一个匹配行。因为只有一行所以被视为常量。const查询速度非常快,因为只读一次,一般情况下把主键或唯一索引作为唯一条件的查询时会是const。
  • eq_ref :查询时查询外键表全部数据。且只能查询主键列或关联列。且外键表中外键列中数据不能有重复数据,这些数据都必须在主键表中有对应数据(主键表中数据可以有 没有用到的)
  • ref :相比eq_ref,不对外键列有强制要求,即:外键列中数据可以重复,只要出现重复的数据取值就是ref。也可能时索引查询。
  • range :把这个列当作条件只检索其中一个范围。常见where子句中出现between、<、in等操作时会出现。主要应用在具有索引的列中才会出现。
  • index :这个连接类型对前边的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表的数据),相当于扫描了索引树。
  • ALL:这个连接类型对于前面的每一个记录联合惊醒完全扫描,一般是比较糟糕的需要避免。

 3.6、possible_keys

  查询条件字段涉及到的索引名。

 3.7、key

  实际使用的索引,如果是NULL,则没有使用索引。

 3.8、key_len

  表示索引中使用的字节数,查询中使用的索引长度(最大可能长度),并非实际使用长度,理论上长度越短越好。key_len时根据表定义计算而得的,不是通过表内检索出的。

 3.9、ref

  显示索引的那一列被使用了,一般在组合索引中那些被使用

 3.10、rows

  根据表统计信息以及索引选用情况,大致估算出找到所需的记录所需要读取的行数。

 3.11、filtered

  显示了通过条件过滤出的行数的百分比估计值。

 3.12、extra

  MySQL如何解析查询的额外信息。常见的包括:Distinct,Not exists,Using index....等等等,如果见到可以搜索下

 

标签:数据,查询,学习,索引,MySQL,执行,ref
From: https://www.cnblogs.com/CircleWang/p/16715516.html

相关文章

  • MySQL学习——分页查询
    在Orcale中我们也介绍过了使用内建视图和rownum来实现分页的操作(Oracle学习——视图、序列、索引),而MySQL有更加方便的实现分页查询的操作。1、LIMIT语法格式SELECT......
  • 第五章 logstash学习
    一、ELK搭建1.ES搭建2.logstash搭建1)安装java环境2)安装logstash3)配置环境变量4)logstash的插件INPUT:插件使Logstash能够读取特定的事件源。OUTPUT:插件将事件数据发......
  • MySQL查看数据库表容量大小
    1.查看所有数据库容量大小selecttable_schemaas'数据库',sum(table_rows)as'记录数',sum(truncate(data_length/1024/1024,2))as'数据容量(MB)',sum(truncate......
  • el-upload 只执行一次上传就没反应了
    原因是浏览器还保存着我们已经上传的文件,所以应该在上传成功后清除掉这样就可以继续上传了......
  • 记:信息系统项目管理师学习笔记三
    学习流程:先整理十大管理的详细知识点,然后是其他章节的内容项目整体管理:识别、确定、结合、统一与协调各项目管理过程组内不同过程与项目管理活动所需进行的各种过程和活......
  • 第一天的学习
    Markbown学习标题文字Hello,world!Hello,world!Hello,world!引用java学习 分割线图片 超链接Wlop列表ABC表格 名字性别生日张......
  • 如何在 Visual Studio Code 中设置和运行机器学习
    如何在VisualStudioCode中设置和运行机器学习如何在VisualStudioCode中设置和运行机器学习VSCode的市场充满了基本上所有编程目的的扩展,无论是自动完成代码片......
  • STC51单片机学习笔记
    点灯系列STC8点灯点击查看STC8点灯代码#include<STC8H.H>//include了stc8h.h,就不用声明P0M1之类的//#include"reg51.h"//sfrP0M1=0x93;//sfrP0M0=0x94;......
  • MySQL主从同步详解与配置
    MySQL主从同步详解与配置走鹿带凨爱生活,有理想,善思考,能沟通 21人赞同了该文章 https://zhuanlan.zhihu.com/p/335142300MySQL主从同......
  • MySQL指令
    目录SQL语言的分类DQL(数据查询语言)select关键字组合顺序select简单查询用法select条件查询select函数使用select多表连接查询select子查询Union结果集合并Limit分页显示DDL......