首页 > 其他分享 >Explain执行计划分析

Explain执行计划分析

时间:2023-04-23 16:23:44浏览次数:36  
标签:union Explain 查询 索引 计划 Using 执行 ref select

id

操作的唯一标识,值越大的操作越先执行

select_type

操作的类型,不同类型的查询效率不同.包括:

  • simple,简单的select语句,查询中不包含自查询或者union
  • primary,查询若包含任何复杂的子部分,最外层查询则被标记为primary
  • subquery,在select或where列表中包含子查询
  • derived,在from列表中包含自查询被标记为derived(衍生)MySQL会递归执行这些自查询,把结果放在临时表中
  • union,若第二个select出现在union之后,则被标记为union.若 union包含在from子句子查询中,外层select将别标记为derived
  • union result,从union表中获取结果的select

table

操作涉及的表

partitions

操作涉及的分区

type

查询使用的索引类型,按照性能排序如下
:::info
system > const > eq_ref > ref > range > index > all
:::

**system **

系统级,基本不会出现,忽略不计

count

常数索引,一般出现在使用唯一索引进行唯一性查询

eq_ref

唯一索引,只扫描一个匹配行

ref

非唯一索引,只扫描索引树的一小部分查找匹配行

range

范围扫描,使用索引范围查询,扫描索引树的一个范围查找匹配行

index

全索引扫描,遍历整个索引树查找匹配行,一般出现在不符合最左原则的查询

all

全表扫描,遍历全表查找匹配行,非索引字段查询

总结:

按照经验,查询应该优化到至少range级别,能达到ref最好

possible_keys

可能被查询优化器选择使用的索引

key

优化器选择使用的索引

key_len

索引的长度.长度越短,查询效率越高

ref

连接操作使用的索引

rows

操作需要扫描的数据行数

filtered

操作过滤掉的函数与扫描的行数的百分比.数值越大,查询得越准确

extra

额外信息,不在前面的列但是非常重要的其他信息,常见信息如下:

  • Using filesort

使用文件排序,发生在无法使用索引排序时

  • Using temporary

临时表保存中间结果;常见于排序order by和分组group by

  • Using index

覆盖索引

  • Using index condition

索引下推

  • Using where

未索引覆盖,使用了where过滤

  • Using join buffer

使用了链接缓存

  • impossible where

where条件子句总是false

  • distinct

优化distinct操作,在找到第一匹配的值后立即停止找相同值的动作

标签:union,Explain,查询,索引,计划,Using,执行,ref,select
From: https://www.cnblogs.com/xxhahn/p/17346849.html

相关文章

  • 使用pipeline执行命令遇到redis.Nil的坑
    参考项目kratos_rockscacheredis数据准备关键代码特别注意,使用pipeline的Exec方法,一定要判断一下redis.Nil这个错误:~~~......
  • Srping AOP的学习(三):AOP的执行过程
    1.说明前面学习了springAOP的简单使用以及代理的一些知识,我们知道AOP的原理主要是使用了动态代理,那么它的具体执行流程又是怎样的呢?下面来使用SpringAOP的学习(一)中的demo来进行看一下。2.分析   转: https://www.cnblogs.com/mcj123/p/16884603.html ......
  • MFC-CreateProcess创建一个新的进程和它的主线程并执行外部程序
     CONSTTCHARpath[]=_T("C:\\Users\\Administrator\\Desktop\\test.exe");PROCESS_INFORMATIONinfo;STARTUPINFOsi={sizeof(si)};BOOLb=CreateProcess(path,NULL,NULL,NULL,FALSE,NULL,NULL,NULL,&si,&info);/......
  • linux中使用jmeter进行压力测试执行篇及遇到的问题
    上传jmx格式的脚本,修改权限chmod777XX.jmx 执行脚本 jmeter-n-tdenglu200.jmx-ldenglu200.jtl  -n代表nogui格式 -t代表执行的脚本 -l代表日志文件在linux里用vim编辑XX.jmx脚本,可以直接修改线程数循环次数,线程启动时间,测试链接,参数化的文件要上传到服......
  • 如何在交互式环境中执行Python程序
    相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行、命令行窗口运行、开发工具上运行等,其中在不同的操作平台上还互不相同。今天,小编讲些Python基础的内容,以Windows下交互式环境为依托,演示Python程序的运行。一般来说,顺利安装Python......
  • Liunx配置sudo使oracle用户有root权限执行脚本
    1、vi/etc/sudoers将%wheel两行前的注释#删除2. vi/etc/group将oracle用户加入wheel组......
  • 碎碎念——谈谈工作计划和最近出差
    今日鸡汤远方降至,热血难凉。一、前言    这篇文章主要是为了记录下近期自己工作和生活的事情。一开始其实我是拒绝给大家分享自己工作和生活方面的碎碎念,毕竟这个公众号的大部分是用于分享技术层面的相关文章。    近期在一位好朋友的建议下,说是可以偶尔给读者们分享下自己......
  • 【源码分析】XXL-JOB的执行器的注册流程
    目的:分析xxl-job执行器的注册过程流程:获取执行器中所有被注解(@xxlJjob)修饰的handler执行器注册过程执行器中任务执行过程版本:xxl-job2.3.1建议:下载xxl-job源码,按流程图debug调试,看堆栈信息并按文章内容理解执行流程。完整流程图:查找Handler任务部分流程图:首先启......
  • 理解Java程序的执行
    main方法publicclassSolution{publicstaticvoidmain(String[]args){Personperson=newPerson();person.hello();}}classPerson{publicvoidhello(){System.out.println("hello");}}源文件名是Solu......
  • 理解Java程序的执行
    main方法publicclassSolution{publicstaticvoidmain(String[]args){Personperson=newPerson();person.hello();}}classPerson{publicvoidhello(){System.out.println("hello");}}源文件名是Solu......