高性能Mysql——SQL执行计划分析(EXPLAIN)

2023-11-08

通过EXPLAIN进行执行计划分析

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。

-- 实际SQL,查找用户名为Jefabc的员工
select * from emp where name = 'Jefabc';
-- 查看SQL是否使用索引,前面加上explain即可
explain select * from emp where name = 'Jefabc';

expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra
在这里插入图片描述

ID

SELECT识别符。这是SELECT的查询序列号

  1. id相同时,执行顺序由上至下
  2. 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

比如下面这样一个语句:

EXPLAIN
SELECT title 
FROM (
SELECT id,MAX(product_id) as pid
FROM product_info
GROUP BY one_category_id
) a JOIN product_comment b ON a.pid=b.`product_id`

其运行结果如下:
在这里插入图片描述
可以由ID看出,显示执行语句SELECT id,MAX(product_id) as pid FROM product_info GROUP BY one_category_id,然后才执行另外两个选择语句。

select_type

(1) SIMPLE(简单SELECT,不使用UNION或子查询等)
(2) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
(3) SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)
(4) DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)

比如下面这个语句:

EXPlAIN
SELECT title
FROM product_comment
WHERE product_id IN(
SELECT MAX(product_id) FROM product_info 
WHERE one_category_id IN (
SELECT MIN(category_id) FROM product_category));

其结果为:
在这里插入图片描述
(5) UNION(UNION中的第二个或后面的SELECT语句)
(6) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
(7) UNION RESULT(UNION的结果,union语句中第二个select开始后面所有select)
(8) DERIVED(派生表的SELECT, FROM子句的子查询)
(9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)

Table

显示这一步所访问数据库中表名称(显示这一行的数据是关于哪张表的),有时不是真实的表名字,可能是取的别名。

Partitions

显示分区表的分区ID,如果不是分区表,会显示为NULL.

Type

对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”。
在这里插入图片描述

Extra

Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤

Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by

Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”

-- 测试Extra的filesort
explain select * from emp order by name;

Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

Impossible where:这个值强调了where语句会导致没有符合条件的行(通过收集统计信息不可能存在结果)。

Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行

No tables used:Query语句中使用from dual 或不含任何from子句

-- explain select now() from dual;

possible_keys

指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)

该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询。

Key

key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中

如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

key_len

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

不损失精确性的情况下,长度越短越好

Ref

列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

Rows

估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

Filtered

表示返回结果的行数占需要读取行数的百分比,Filtered列的值越大越好。

EXPLAIN不能完成的事项

• EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
• EXPLAIN不考虑各种Cache
• EXPLAIN不能显示MySQL在执行查询时所作的优化工作
• 部分统计信息是估算的,并非精确值
• EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高性能Mysql——SQL执行计划分析(EXPLAIN) 的相关文章

  • mysql+关掉密码过期

    mysql 关掉密码过期 要在MySQL中关闭密码过期功能 可以按照以下步骤进行操作 登录到MySQL服务器 使用管理员账户 如root 连接到数据库 mysql uroot ppassword 运行以下命令来查看当前的密码过期设置 SHO
  • 【计算机开题报告】 网上茶叶销售平台设计与开发

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 1 研究背景 随着社会经济的迅速发展和科学技术的全面进步 以计算机与网络技术为基础的信息系统正处于蓬勃发展的时期 随着经济文化水平的提高 近年来 随着科学
  • sql临时表、创建虚拟表、select临时表、多行数据、自定义数据、插入数据

    SELECT FROM VALUES John 25 Jane 30 Mike 35 AS table name name age 方法2 select 1 2 union all select 3 4
  • Nexus5596交换机支持3层需要的子卡

    3层子卡 nexus5596如果没有这块子卡 无法支持3层特性 TEST Cisco N5596 1 show modu Mod Ports Module Type Model Status 1 48 O2 32X10GBase T 16X
  • 实时获取建材网商品数据:API实现详解与代码示例

    一 引言 随着电子商务的快速发展 实时获取商品数据对于企业决策 市场分析以及数据驱动的营销策略至关重要 建材网作为国内知名的建材信息平台 提供了API接口 使得第三方开发者可以方便地获取商品数据 本文将详细介绍如何使用 建材网的API接口
  • 天猫数据分析工具推荐(天猫第三方数据平台)

    在电商迅速发展的大背景下 做好天猫数据分析能够在多方面帮助品牌商家更好地运营店铺 塑造品牌 如通过数据分析了解消费者的需求 购买偏好 这有利于品牌商家及时调整商品结构 产品推广 商品宣传等等 灵活制定品牌的销售策略 那么 天猫平台行业 品牌
  • 神州信息一表通监管合规系统

    什么是 一表通 国家金融监督管理总局为进一步建立健全数据统计监管体系 规范数据报送指标体系 明确检测数据规则 而推行建立的一套新体系监管报送方式 提升校验准确性和信息安全性 近期 国家金融监督管理总局更是进一步加大推动 一表通 的实行试点范
  • Qt源码分析:Qt程序是怎么运行起来的?

    一 从 exec 谈起 一个标准的Qt gui程序 在启动时我们会coding如下几行简洁的代码 include widget h include
  • 亚信安慧AntDB引领数字化转型:浙江移动成功实现CRM系统全域改造

    数字时代 通信运营商在不断迭代的背景下 需要不断探索数字化转型的路径 以适应快速发展的市场和技术环境 在这一浪潮中 浙江移动站在前沿 率先完成了其CRM系统的全域改造 采用了亚信安慧公司研发的AntDB数据库 为整个行业树立了数字化转型的标
  • 【Mysql】InnoDB 引擎中的页目录

    一 页目录和槽 现在知道记录在页中按照主键大小顺序串成了单链表 那么我使用主键查询的时候 最顺其自然的办法肯定是从第一条记录 也就是 Infrimum 记录开始 一直向后找 只要存在总会找到 这种在数据量少的时候还好说 一旦数据多了 遍历耗
  • 【计算机毕业设计】校园体育赛事管理系统

    身处网络时代 随着网络系统体系发展的不断成熟和完善 人们的生活也随之发生了很大的变化 人们在追求较高物质生活的同时 也在想着如何使自身的精神内涵得到提升 而读书就是人们获得精神享受非常重要的途径 为了满足人们随时随地只要有网络就可以看书的要
  • 【计算机毕业设计】网上拍卖系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本网上拍卖系统就是在这样的大环境下诞生 其可以帮助使用者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人员
  • 【计算机毕业设计】Java图书馆智能选座系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本图书馆智能选座系统就是在这样的大环境下诞生 其可以帮助使用者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管
  • 图解python | 字符串及操作

    1 Python元组 Python的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 tup1 ByteDance ShowMeAI 1997 202
  • 电商数据api接口商品评论接口接入代码演示案例

    电商数据API接口商品评论 接口接入入口 提高用户体验 通过获取用户对商品的评论 商家可以了解用户对商品的满意度和需求 从而优化商品和服务 提高用户体验 提升销售业绩 用户在购买商品前通常会查看其他用户的评论 以了解商品的实际效果和质量 商
  • 【计算机毕业设计】微信小程序反诈科普平台

    相比于以前的传统手工管理方式 智能化的管理方式可以大幅降低反诈科普平台的运营人员成本 实现了反诈科普平台的标准化 制度化 程序化的管理 有效地防止了反诈科普平台的随意管理 提高了信息的处理速度和精确度 能够及时 准确地查询和修正反诈科普 一
  • 【计算机毕业设计】springbootstone音乐播放器的设计与实现

    随着我国经济的高速发展与人们生活水平的日益提高 人们对生活质量的追求也多种多样 尤其在人们生活节奏不断加快的当下 人们更趋向于足不出户解决生活上的问题 stone音乐播放器展现了其蓬勃生命力和广阔的前景 与此同时 为解决用户需求 stone
  • Oracle EBS AP发票导入 API Rejection List 第二部分

    Oracle EBS AP发票导入 API Rejection List 第二部分 The report lists the reason the invoice could not be imported and prints a bri
  • Redis分布式锁--java实现

    文章目录 Redis分布式锁 方案 SETNX EXPIRE 基本原理 比较好的实现 会产生四个问题 几种解决原子性的方案
  • 光波导结构

    摘要 增强现实和混合现实 AR MR 领域的新应用引起了人们对带有光栅区域的光波导系统的越来越多的关注 这些光波导系统用于输入和输出耦合以及扩瞳目的 VirtualLab Fusion为这类系统的仿真和设计提供了几个强大的工具 其中一个是具

随机推荐

  • QA工具开发流程

    前言 在项目上线前期 这边根据需求制作了一套QA测试工具 主要分为以下四个模块的测试 图1 数值测试 主要包括了角色的等级变更 游戏里货币的变更 目前已制作的 游戏道具的数量变更 这些可能归一为一类测试模型 动画测试 包括角色的控制系统的所
  • 直流电机驱动PWM频率(转)

    源 直流电机驱动PWM频率 1 没有统一的标准 其实PWM的频率和你的电机感抗和你需要的速度响应时间有很大的关系 一般的电机用14K就足够了 当然自需要简单的调速可以随便选 如果电机转速比较高 感抗比较小 可以使用比较高的频率 一般最好不要
  • 【详细】使用MkDocs搭建个人博客网站

    使用MkDocs搭建个人博客网站 0 安装python3 7 注意 可以在个人用户下安装 不要覆盖系统原有python 下载Python依赖环境 yum install gcc patch libffi devel python devel
  • 并发编程(线程)面试题总结2022

    目录 并发编程三要素是什么 在 Java 程序中怎么保证 多线程 的运行安全 什么是多线程 多线程的优劣 形成死锁的四个必要条件是什么 创建线程有哪几种方式 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口
  • ubuntu12.10 32位系统使用framebuffer显示24深度bmp文件

    参考了网上很多例子 但是大多数都是有问题 只能显示部分 而且图片不是很清楚 在csdn上下载了一个代码是ok的 总结一下就是 1 mmap的大小如何确定 2 bmp文件的保存顺序是由下到上层的 3 fread char pix 1 size
  • Pandas: 使用read_excel、describe、loc方法求极差、变异系数与四分位数间距

    极差 最大值 最小值 变异系数 标准差 平均数 四分位间距 QU上四分位 QL下四分位 coding utf 8 import pandas as pd init data data init data summary xls data p
  • ICTCLAS2013 Java版本的使用方法

    这个工具是什么 先看看他的官方介绍吧 NLPIR汉语分词系统 又名ICTCLAS2013 主要功能包括中文分词 词性标注 命名实体识别 用户词典功能 支持GBK编码 UTF8编码 BIG5编码 新增微博分词 新词发现与关键词提取 张华平博士
  • PNP结算方法(后面可能有空再补充了)

    一些pnp的实验结论 1 yaw角稳定性上 在opencv中 SOLVEPNP UPNP SOLVEPNP EPNP SOLVEPNP DLS gt gt SOLVEPNP IPPE gt SOLVEPNP AP3P gt SOLVEPNP
  • 10 行代码,实现手写数字识别

    识别手写的阿拉伯数字 对于人类来说十分简单 但是对于程序来说还是有些复杂的 不过随着机器学习技术的普及 使用10几行代码 实现一个能够识别手写数字的程序 并不是一件难事 这是因为有太多的机器学习模型可以拿来直接用 比如tensorflow
  • react 项目中使用js-export-excel导出excel

    第一步 首先添加包 npm npm install js export excel yarn yarn add js export excel 第二步 组件引入 import ExportJsonExcel from js export e
  • 嵌入式FreeRTOS学习三,FreeRTOS任务的挂起和恢复

    二 任务的挂起和恢复 有时候我们需要暂停某个任务的运行 过一段时间以后在重新运行 这个时候要是使用任务删除和重建的方法的话 那么任务中变量保存的值肯定丢失了 FreeRTOS给我们提供了解决这种问题的方法 那就是任务挂起和恢复 当某个任务要
  • k8s通过Kuboard安装Metrics server报错的解决办法

    文章目录 通过Kuboard安装Metrics server 确认 metrics server 是否正常运行 确认 ApiService 是否正常 排查步骤1 根据ApiService的日志 查443端口 排查步骤2 metrics se
  • 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定

    1 关注微信公众号 公众平台安全助手 2 关闭该公众号的消息免打扰 如下 1 点击3个点 2 点击设置 3 关闭消息免打扰 如图所示 置灰
  • k8s之Deployment与service

    一 概念 pod 最小执行调度单元 Deployment 部署无状态应用 Daemonset 部署守护应用 Cronjob 部署定时任务 job 部署定时任务 statefulset 部署有状态应用 service endpoint ing
  • iOS上传App Store报错:this action cannot be completed -22421 解决方案

    iOS上传App Store报错 this action cannot be completed 22421 解决方案 参考文章 1 iOS上传App Store报错 this action cannot be completed 2242
  • 牛客 · 奇♂妙拆分

    奇 妙拆分 题目描述 在遥远的米 奇 妙 妙 屋里住着一群自然数 他们没事就喜欢拆 开自己来探 究 现在他们想知道自己最多能被拆分成多少个不同的自然数 使得这些自然数相乘的值等于被拆分的数 输入描述 第 1 1 1行输入一个整数 T
  • 一图看懂架构划分原则:技术划分 OR 领域划分?

    架构划分原则 技术划分 描述 按技术用途组织系统组件 典型示例 分层 多层 架构 组件按技术层组织 用户界面 与用户直接交互的部分 业务规则和核心处理 逻辑和算法 与数据库交互 数据存取和查询 数据库层 数据存储和管理 优点 当大部分更改与
  • Linux域名解析得到ip地址

    Linux下域名解析得到ip地址代码如下 include
  • Redis(持续完善....)

    1 Redis结构 Redis是一款基于内存的NoSQL数据存储服务 是非关系型的 是使用K V结构进行存储的 gt lt 基于内存 读写数据均在内存中直接操作 gt
  • 高性能Mysql——SQL执行计划分析(EXPLAIN)

    文章目录 通过EXPLAIN进行执行计划分析 ID select type Table Partitions Type Extra possible keys Key key len Ref Rows Filtered EXPLAIN不能完