美文网首页
MySQL执行计划

MySQL执行计划

作者: 森林中大鸟 | 来源:发表于2020-08-21 18:45 被阅读0次

id 表的读取顺序

执行优先级,id相同从上到下依次执行,id不同,id从大到小依次执行

select_type 查询类型

simple 简单查询,不包含子查询,union

primary 最外层的查询 ,鸡蛋壳,查询中包含任何复杂的子查询时,最外层的查询。

subquery 在select 或 where中包含的子查询

derived 在from中包含的子查询被标记为derived(衍生)MySQL会递归的执行这些子查询,把结果放在临时表。derived后的数字即为id

union 若第二个select 出现在union之后则被标记位union;若union包含在from子句的查询中,外层select 被标记未derived;

union result 两个union合并的结果集

type

从最好到最差
system 》 const 》 eq_ref》 ref 》 range 》 index 》all

  • system
    单表单行记录,等价于系统表

  • const
    表示通过索引一次找到了记录,const用于比较主键列或唯一索引列,索引很快,如果主键置于where中,MySQL就可以把该查寻替换为一个常量。

  • eq_ref
    唯一性索引扫描,对于每个索引键,表中只有一条记录与之对应
    select * from t1,t2 where t1.id=t2.id

  • ref
    非为一性索引扫描, 返回返回匹配某个单独值的所有行;
    select * from t where col = ’s';

  • range
    只检索给定范围的行key显示用了那和索引,一般是在where中出现了范围查询,它开始于索引的一点,结束语索引的另一个点,比全表扫描快。
    select * from t where id between 1 and 10;

  • index
    Full index scan 全索引扫描
    index和all的区别为index只遍历索引树,通常比all快,因为索引文件更小。都是都全表。
    select id from t1;

  • all
    全表扫描;

possible keys

可能用到的索引。

key

实际用到的索引,为null 表示没有用到索引。或者没建立索引
拆卸像那种若使用到了覆盖索引,则该索引只出现在key这一列中;

key_len

表示索引中使用到的字节数,可通过该列计算查询寻中使用到额索引的长度,再不损失精度的情况下,用的越少越好。
显示的值为索引字段的最大长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。
比如:col1 列 索引长度13,col2 列 索引长度13 where col1 = ‘ss’ key_len = 13 where col1 = 'a' and col2 ='s' key_len = 26

ref

type 为 ref/eq_ref 时
显示哪一列被使用了,如果可能的话,最好是一个常数。
库.表.字段 const

rows

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

filterd

过滤掉了多少行

extra

  • using filesort 需要优化
    说明 MySQL会对数据使用一个外部的索引排序, 而不是按照表内的索引顺序进行读取。MySQL中无法使用索引完成的排序操作成为文件排序。
  • using tempory 必须优化
    使用了临时表保存中间结果,MySQL对查询结果排序时使用临时表,常见于order by group by
  • using index 覆盖索引(查询的列被所建的索引覆盖)
    表明使用了发覆盖索引,避免访问数据行(回表)
    如果出现了using where 说明索引被用来执行索引键值的查找;
    如果没有using where 说明索引直接用来读取数据。
  • using where
    表明使用了where 过滤
  • using join buffer
    使用了连接缓存,
  • impossible where
    where 子句的值总是false,不能用来获取元素。
    where id= 1 and id = 3;
  • select tables optmized away
    没有group by 子句的情况下,基于索引min/max操作或者对于myisam存储疫情优化count(*),不必等到执行阶段计算,查询执行计划生成的阶段即可完成优化。
  • distinct
    找到第一个匹配的时候就返回。

相关文章

  • MySQL源码解析之执行计划

    MySQL源码解析之执行计划 MySQL执行计划介绍 MySQL执行计划代码概览 MySQL执行计划总结 一、My...

  • Mysql优化之explain详解

    关键词: mysql explain sql优化 执行计划 简述:explain为mysql提供语句的执行计划信息...

  • MYSQL执行计划字段详解

    Mysql查看执行计划 explain + sql :输出执行计划。explain extended + sql ...

  • MySQL的执行计划

    MySQL的执行计划 什么是执行计划? 执行计划通常是开发者优化SQL语句的第一步。MySQL在解析SQL语句时,...

  • 索引

    一文说尽 MySQL 优化原理MySQL 索引管理与执行计划

  • MySQL进阶之路--EXPLAIN执行计划详解

    执行计划简介 执行计划是指一条SQL语句在经过MySQL查询优化器的优化会后,具体的执行方式。MySQL为我们提供...

  • MySQL执行计划

    MySQL执行计划[https://www.jianshu.com/p/c68cd839cf26] 执行计划,简单...

  • Mysql执行计划功能详解

    Mysql执行计划使用详解 在Mysql调优过程中其中最关键的一点,就是正确使用执行计划,从而查看SQL语句的具体...

  • Mysql - Explain

    Mysql - Explain explain + 查询sql可以生成一个执行计划,可以通过执行计划来进行sql优...

  • EXPLAIN 命令详解

    # MySQL Explain详解 __简介__ 执行计划(`query Execution plan`) __语...

网友评论

      本文标题:MySQL执行计划

      本文链接:https://www.haomeiwen.com/subject/knrpjktx.html