Mysql 执行计划

2023-11-01

EXPLAIN

参考:

  • https://blog.csdn.net/wanbin6470398/article/details/82256436
  • https://blog.csdn.net/weixin_41558728/article/details/81704916

一 用例

id select_type table partitions type possible_keys key key_len ref rows filtered Extra
执行顺序 查询类型 目标表 目标分区 连接使用的类型 可能使用的索引 实际选择的索引 使用的索引的长度 显示索引的哪一列被使用了 执行行数 按表条件过滤行的百分比 附加信息
1 SIMPLE t_level_type ref PRIMARY PRIMARY 152 const 2510 1.11 Using where
1 SIMPLE t_flow_main ALL 3309759 0 Using where; Using join buffer (Block Nested Loop)

二 EXPLAIN 字段清单

列名 JSON Name Meaning
id select_id 查询序列号 ,或执行顺序提示信息。MySQL Query Optimizer 选定的执行计划中查询的序列号。表示查询中执行 select 子句或操作表的顺序, id 值越大优先级越高,越先被执行。 id 相同,执行顺序由上至下。
select_type None 查询类型
table table_name 查询目标(表),输出行所引用的表
partitions partitions 查询目标(分区),匹配的分区
type access_type 连接使用的类型
possible_keys possible_keys 指出 MySQL 能在该表中使用哪些索引有助于查询。如果为空,说明没有可用的索引
key key 实际选择的索引
key_len key_length 使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref ref 显示索引的哪一列被使用了
rows rows MYSQL 认为必须检查的用来返回请求数据的行数
filtered filtered 按表条件过滤行的百分比
Extra None 附加信息

三 查询顺序,【id字段】

查询序列号 , MySQL Query Optimizer 选定的执行计划中查询的序列号。表示SQL执行顺序.

一看数值、二看顺序。id值本质是执行的分组标识,数值大的分组先被执行,id值相同表示在同一分组,执行顺序从上到下。

  • id不同
  • id相同
  • id相同又不同

3.1 id值不同:数值大的先被执行。

如果是子查询,id的序号会递增在这里插入图片描述

3.2 id值相同:执行顺序由上至下

在这里插入图片描述

3.3 id值相同又不同:

id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
在这里插入图片描述

四 查询目标,【table】【partitions】

  • table , 目标表,可以是一张明确的表,也可以是一张经过排序的临时表()。
  • partitions, 目标分区

五 select_type,查询类型标识

怎么做查的,怎么做事的。

select_type Value JSON Name Meaning
SIMPLE None 简单的SELECT(不使用UNION或子查询)
PRIMARY None 最外层的SELECT
UNION None
DEPENDENT UNION dependent (true) UNION中的第二个或随后的SELECT语句,依赖于外部查询
UNION RESULT union_result UNION 查询的结果集
SUBQUERY None 子查询中的第一个SELECT查询,不依赖于外部查询的结果集
DEPENDENT SUBQUERY dependent (true) 子查询中的第一个SELECT,依赖于外部查询的结果集
DERIVED None 用于 from 子句里有子查询的情况。 MySQL会递归执行这些子查询,把结果放在临时表里

MATERIALIZED materialized_from_subquery 物化子查询
UNCACHEABLE SUBQUERY cacheable (false) 结果集不能被缓存的子查询,必须重新为外层查询的每一行进行评估
UNCACHEABLE UNION cacheable (false) UNION 中的第二个或随后的 select 查询,属于不可缓存的子查询

六 type

性能:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

type 说明
ALL 全数据表扫描
index 全索引表扫描
RANGE 对索引列进行范围查找
INDEX_MERGE 合并索引,使用多个单列索引搜索
REF 根据索引查找一个或多个值
EQ_REF 搜索时使用primary key 或 unique类型
CONST 常量,表最多有一个匹配行,因为仅有一行,在这行的列值可被优化器剩余部分认为是常数,const表很快,因为它们只读取一次。
SYSTEM 系统,表仅有一行(=系统表)。这是const联接类型的一个特例。

七 索引, possible_keys & key & ref

  • possible_keys ,可能会用到的索引 , null值表示没用到
  • key , 实际使用的索引
  • ref , 引用了,其他表的索引

场景一 、【可能会】有索引,【实际情况】走索引。

最佳,理想情况。

possible_keys key
index_id index_id

场景二、 【可能会】有索引,【实际情况】没走索引。

where 子句中有索引, select 子句使用 *

possible_keys key
index_id

场景三、 【可能会】为空,【实际情况】走索引。

where 子句中没有使用索引,select 子句有索引所以实际被使用

possible_keys key
null index_id

八 索引长度 key_len

越短越好

九 rows ,filtered

  • rows ,估算找到记录需要读取的函数(根据表统计信息)
    • 没建索引肯定是全表走,建了索引肯定走一部分。(数据结构)
  • filtered , 满足查询的记录数量的比例(值越打越好)

十 Extra , 扩展信息

  • Using filesort , 使用了文件排序,
  • Using temporay , 临时表
  • Using index, 使用了索引
  • Using where , 使用了where 条件
  • Using join bufffer , 使用了缓存
  • impossible where , where 子句值总是false 不能用来获取任何元组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql 执行计划 的相关文章

  • MySQL - 通过部分单词匹配和相关性评分进行高效搜索(全文)

    如何进行 MySQL 搜索 既匹配部分单词 又提供准确的相关性排序 SELECT name MATCH name AGAINST math IN BOOLEAN MODE AS relevance FROM subjects WHERE M
  • 如何使用WAMP登录phpMyAdmin,用户名和密码是什么?

    根 这个词是什么意思php我的管理员 http en wikipedia org wiki PhpMyAdmin 每当我写作时localhost phpmyadmin在地址栏上 我被要求输入用户名和密码 但我不知道它们是什么 我不记得何时何
  • 从 MySQL 返回结果时的数字顺序

    我的数据库表中有以下类型的标题 Topic 1 blah blah Topic 2 blah blah Topic 3 blah blah Topic 10 blah blah Topic 11 blah blah etc 选择查询将始终返
  • MySQL 可以存储多少行?

    所以我是一个初学者 刚刚自学了几个月的MySQL 我在工作中总是使用 phpMyAdmin 我过去的工作只涉及大约 100k 行的表 所以没有什么大问题 然而 我的客户现在想要在表中存储大约 800 万行 MySQL phpMyAdmin
  • 如何更改Linux服务器中的MySQL表名不区分大小写?

    我正在开发一个旧网站 该网站曾经托管在 Apple 服务器上 当它迁移到新的 Linux 服务器时 它停止工作 我很确定这是因为 php 脚本中使用的所有 MySQL 查询对于表名都有不同的大小写组合 我不知道为什么原始开发人员在创建表名或
  • Session_set_save_handler 未设置

    我在设置 session set save handler 时遇到问题 我将 php ini 配置为 session handler user 这个简单的测试失败了 Define custom session handler if sess
  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • 如何将UTF-8编码的汉字从MySql正确导出到SQL

    过去三天我们正在与严重的问题作斗争 我们从PhpmyAdmin导出MySql数据库文件 数据库条目中写入的数据是带有UTF 8字符集的中文 导出后将其转换为拉丁字符集 现在我们正在将此数据库SQl文件导入到其他主机 我们在UTF 8和排序规
  • Node.js 将 async/await 与 mysql 一起使用

    我一直在尝试在节点中将 async await 与 MySQL 一起使用 但它每次都会返回一个未定义的值 有理由吗 请在下面找到我的代码 const mysql require promise mysql var connection co
  • mysql - 选择日期时间和组中的小时

    我有一个 ShoppingDates 的日期时间列 假设我有 1000 行 2012 年 7 月 18 日 5 33 39 下午 2012 年 7 月 16 日 6 64 39 下午 2012 年 7 月 14 日 7 34 39 下午 2
  • 新行分隔符不适用于 group_concat 函数

    我有一根绳子 name lastname name2 lastname2 包含数据库表中的值 我想显示它 喜欢 name lastname name2 lastname2 我使用 group concat 函数 它适用于逗号分隔符 但我需要
  • 学说 - 获取下一个和上一个记录

    这样我就已经获取了一些记录 我已创建日期字段 现在我想按日期获取下一条和上一条记录 通过以下方式让它工作 qb this gt createQueryBuilder a next qb gt expr gt gt a created dat
  • mysql 无法向用户授予权限,出现错误:ERROR 1819 (HY000): 您的密码不满足当前策略要求

    我正在将一个新应用程序迁移到包含 MySQL 数据库的生产环境 尝试使用以下命令授予所需权限时 GRANT ALTER CREATE ON MyDB to ThisUser 我收到错误 ERROR 1819 HY000 Your passw
  • 存储 MySQL GUID/UUID

    这是我能想到的将 UUID 生成的 MySQL GUID UUID 转换为二进制文件 16 的最佳方法 UNHEX REPLACE UUID 然后将其存储在 BINARY 16 中 我应该知道这样做有什么影响吗 从 MySQL 8 0 及以
  • 用于 Mysql 查询的 FLASK HTML 字段

    你好 Stackoverflow 社区 我是 FLASK 的新手 但是虽然学习曲线非常陡峭 但有一个项目我无法理解 我使用一个非常简单的 HTML 搜索表单 用户在其中输入城市名称 此输入将传递到 Mysql 查询并将输出返回到表中 一切正
  • 交叉表的动态 MySQL 查询/视图

    我目前有一个带有以下 sql 的硬编码视图 select username case user role role id when 1 then true else false end as ROLE SUPER case user rol
  • Laravel 5.2 中使用多个 MySQL 数据库连接查询关系存在

    我正在处理以下情况 我有两个模型 一个Employee with id and name字段和一个Telephone with id employee id and flag字段 还有一个一对多关系在这两种模型之间 即一个员工可能拥有多部电
  • 复制具有不同列名的 MySQL 表

    我需要将 table1 中与特定列匹配的所有行复制到具有不同列名称的 table2 中 例如 table1 name oldAddressBook table1 的列 name Name Surname Number table2 name
  • MySQL 连接最新行

    我有两张桌子agents and calls 座席将始终处于一个活动呼叫中 可能有另一个待处理的呼叫分配给某个座席 而该座席尚未应答 我想编写一个查询来测试最新的调用是否按排序dateCreated与代理表中当前活动的呼叫匹配 以下是当前呼
  • PHP 插入中的 mysqli_affected_rows

    我有这个代码 if mail to subject message headers insert member sql INSERT INTO members id username VALUES id username insert me

随机推荐

  • Google Chrome在Windows7安装离线版

    前言 今天因为旧版chrome老是要报更新 所以安装了个新版 因为被墙原因 许多网友会遇到一些安装chrome的问题 所以今天分享一下安装教程 安装chrome 1 前往chrome官网 可以看到链接地址是http www google c
  • 如何构造测试数据

    前言 我这里只是专注于生成CSV等测试数据文件 每次构造测试数据的时候就很头疼 之前自己简单造个两三行还行 造多了就有些费脑细胞了 抽出些时间来专门找一下有没有相应工具 小数据量测试数据 小数据量测试数据使用在线的网站就行 10W以内的数据
  • 【Python】使用Python根据BV号爬取对应B站视频下的所有评论(包括评论下的回复)

    Python 使用Python根据BV号爬取对应B站视频下的所有评论 包括评论下的回复 本文写于2020 4 27 当你阅读到本文的时候如果因为下列原因导致本文代码无法正常工作 本人概不负责 B站的页面和API接口的变动 B站为页面和API
  • 操作系统笔记(手写)

    前言 这学期开始学习计算机网络 操作系统和Java程序设计 这些课的重要性不言而喻 对于我这种纯粹的小白来说 压力真得很大 自己水平有限 领悟能力较差 学习接受能力很慢 不知道怎样才能真真的学懂 学会这些东西 所以就先跟着学校安排的网课和配
  • 常见的数据结构与算法

    文章目录 前言 一 常见的数据结构 1 数组 2 链表 3 栈 4 队列 5 树 二 排序 1 基本的排序算法 2 常考的排序算法 3 其他排序算法 三 递归与回溯 1 递归 2 回溯 四 深度与广度优先搜索 1 深度优先搜索 2 广度优先
  • 伴随矩阵介绍及C++实现

    在线性代数中 一个方形矩阵的伴随矩阵是一个类似于逆矩阵的概念 如果矩阵可逆 那么它的逆矩阵和它的伴随矩阵之间只差一个系数 然而 伴随矩阵对不可逆的矩阵也有定义 并且不需要用到除法 设R是一个交换环 在抽象代数之分支环论中 一个交换环 com
  • 【vue】vue子孙组件传值(多级嵌套)attrs listeners

    如果vue开发遇到多层嵌套 子孙组件之间传值 可以使用 attrs listeners传值 示例如下 孙子组件
  • 装上这10个插件,PyCharm才是无敌的存在

    pycharm是一款强大的python集成开发环境 带有一整套python开发工具 今天就给大家介绍几款非常好用的插件 首先插件的下载方法 进入File gt Settings gt Plugins 根据需要搜索插件名称 记得是在Marke
  • db是哪个城市的缩写_全国所有城市拼音及缩写

    北京 BEIJING BJ 上海 SHANGHAI SH 天津 TIANJIN TJ 重庆 CHONGQING ZQ 阿克苏 AKESU AKS 安宁 ANNING AN 安庆 ANQING AQ 鞍山 ANSHAN AS 安顺 ANSHU
  • 分享一款开源堡垒机-jumpserver

    JumpServer是由FIT2CLOUD 飞致远 公司旗下一款开源的堡垒机 这款也是全球首款开源的堡垒机 使用 GNU GPL v2 0 开源协议 是符合 4A 规范的运维安全审计系统 使用 Python 开发 遵循 Web 2 0 规范
  • java basefont_itext 文本域 字体样式设置

    使用acroFields setFieldProperty nameField textfont baseFont null 的方式不能加粗 因为第三个参数必须是BaseFont类型 不能是Font类型 可以使用下面的方式加粗 BaseFo
  • 判断环形链表是否有环??返回环形链表的入口点!!

    上次笔者写了一篇大概有7个题的链表相关的题目 解析 感觉还不错 感兴趣的各位老铁 可以点一下链接进行欣赏 做几个与链表相关的题吧 https blog csdn net weixin 64308540 article details 128
  • 牧师与魔鬼 -- version2 动作分离

    目录 一 基本操作演练 1 下载 Fantasy Skybox FREE 构建自己的游戏场景 2 写一个简单的总结 总结游戏对象的使用 二 编程实践 1 牧师与魔鬼 动作分离版 面向对象的游戏编程 动作管理器的设计思想 动作管理器的设计类图
  • 【LeetCode算法系列题解】第21~25题

    CONTENTS LeetCode 21 合并两个有序链表 简单 LeetCode 22 括号生成 中等 LeetCode 23 合并K个升序链表 困难 LeetCode 24 两两交换链表中的节点 中等 LeetCode 25 K 个一组
  • 2018.1.22-2018.(几年前帖子,私密变公开后时间就变了)

    成为全职程序员 每天9点至17 50 中午11 30 13 00休息 不过我逐渐加班 第一天没加班 第二天加班一小时 第三天2小时 第4天3小时 编译了CGAL OPENCV PCL BOOST等 CGAL的LEDA库没法用 PCL读取点云
  • 【全文检索】sqlite-fts4和pgsql的全文检索对比

    sqlite fts4和pgsql的全文检索对比 一 sqlite fts4 建表语句 插入数据 全文检索 前缀查询 数据更新 二 postgreSQL 全文检索 建表语句 to tsvector 和to tsquery 构建索引 查询结果
  • 正则表达式常用参数

    正则表达式中常用的模式修正符有i g m s U x a D e 等 它们之间可以组合搭配使用 i 不区分 ignore 大小写 例如 abc i 可以匹配 abc aBC Abc g 全局 global 匹配 如果不带g 正则过程中字符串
  • 3.移植uboot-使板卡支持nor、nand

    在上一章 我们添加了nor nand启动后 uboot启动出如下图所示 上面的Flash failed 是属于uboot第二阶段函数board init r 里的代码 代码如下所示 位于arch arm lib board c 第二阶段 v
  • Mac 编译报错 Undefined symbols for architecture x86_64

    问题描述 使用cmake编译项目时 报错内容为 Undefined symbols for architecture x86 64 Obstacle run referenced from main in 1 o Obstacle Obst
  • Mysql 执行计划

    EXPLAIN 参考 https blog csdn net wanbin6470398 article details 82256436 https blog csdn net weixin 41558728 article detail