Mysql执行计划

MySQL执行计划解读 MySQL 执行计划(Execution Plan)是 MySQL 优化器为一条 SQL 查询生成的**详细执行方案**,它描述了数据库将如何执行这条查询,包括:将访问哪些表、使用什么索引、如何连接多个表、扫描多少数据行等关键信息。简单来说,执行计划就像查询的 “路线图”—— 优化器根据表结构、索引、数据量、SQL 语法等因素,计算出它认为 “最高效” 的执行方式,并以结构化表格的形式展示出来。 阅读详情

id:

SELECT标识符。这是查询中SELECT的序号。如果该行引用其他行的并集结果,则值可以为NULL。当id相同时,执行顺序 由上向下;当id不同时,id值越大,优先级越高,越先执行。

select_type:

  • SIMPLE:查询中不包含子查询或者UNION。
  • PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY。
  • SUBQUERY:在SELECT或WHERE列表中包含了子查询,该子查询被标记为SUBQUERY。子查询语句的第一个select语句。
  • DEPENDENT SUBQUERY:依赖外部查询的第一个子查询。
  • UNION:若第二个SELECT出现在UNION之后。
  • UNION RESULT:从UNION表获取结果的SELECT。
  • DEPENDENT UNION:在一个UNION查询中,第二次子查询或以后的SELECT查询的时候需要依赖外部的查询。
  • DERIVED:若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED。
  • DERIVED(衍生):在FROM列表中包含的子查询被标记为DERIVED(衍生)。

table:

表示查询用到的表名,每行都有对应的表名,表名除了正常的表之外,也可能是以下列出的值:

  • <unionM,N>: 本行引用了id为M和N的行的UNION结果;
  • : 本行引用了id为N的表所产生的的派生表结果。派生表有可能产生自FROM语句中的子查询。
  • : 本行引用了id为 N 的表所产生的的物化子查询结果。

type:

查询执行的类型,描述了查询是如何执行的。所有值的顺序从最优到最差排序为:

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

常见的几种类型具体含义如下:

  • system:如果表使用的引擎对于表行数统计是精确的(如:MyISAM),且表中只有一行记录的情况下,访问方法是 system ,是 const 的一种特例。
  • const:表中最多只有一行匹配的记录,一次查询就可以找到,常用于使用主键或唯一索引的所有字段作为查询条件。
  • eq_ref:当连表查询时,前一张表的行在当前这张表中只有一行与之对应。是除了system与const之外最好的join方式,常用于使用主键或唯一索引的所有字段作为连表条件。
  • ref:使用普通索引作为查询条件,查询结果可能找到多个符合条件的行。
  • index_merge:当查询条件使用了多个索引时,表示开启了Index Merge优化,此时执行计划中的key列列出了使用到的索引。
  • range:对索引列进行范围查询,执行计划中的key列表示哪个索引被使用了。
  • index:查询遍历了整棵索引树,与ALL类似,只不过扫描的是索引,而索引一般在内存中,速度更快。
  • ALL:全表扫描。

possible_keys:

possible_keys列表示MySQL 执行查询时可能用到的索引。如果这一列为 NULL ,则表示没有可能用到的索引;这种情况下,需要检查WHERE语句中所使用的的列,看是否可以通过给这些列中某个或多个添加索引的方法来提高查询性能。

key:

key列表示 MySQL 实际使用到的索引。如果为 NULL,则表示未用到索引。

key_len:

key_len列表示 MySQL 实际使用的索引的最大长度;当使用到联合索引时,有可能是多个列的长度和。在满足需求的前提下越短越好。如果key列显示NULL,则key_len列也显示 NULL 。

ref:

ref列显示了在key列记录的索引中表查找值所⽤到的列或常量,常见的有:const(常量),func,null,字段名。

rows:

rows列表示根据表统计信息及选用情况,大致估算出找到所需的记录或所需读取的行数,数值越小越好。

filtered

filtered返回结果的行数占读取行数的百分比,值越大越好。

Extra:

这列包含了MySQL解析查询的额外信息,通过这些信息,可以更准确的理解 MySQL 到底是如何执行查询的。常见的值如下:

  • distinct:数据库发现第1个匹配⾏后,停⽌为当前的⾏组合搜索更多的⾏;
  • not exists:数据库能够对查询进⾏LEFT JOIN优化,发现1个匹配LEFT JOIN标准的⾏后,不再为前⾯的的⾏组合在该表内检查更多的⾏;
  • range checked for each record (index map: #):数据库没有发现好的可以使⽤的索引,但发现如果来⾃前⾯的表的列值已知,可能部分索引可以使⽤;
  • using filesort(重点):数据库会对结果使⽤⼀个外部索引排序,⽽不是按索引次序从表⾥读取⾏。此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和⾏指针,然后排序关键字并按顺序检索⾏信息。这种情况下⼀般也是要考虑使⽤索引来优化的;
  • using index(重点):从只使⽤索引树中的信息⽽不需要进⼀步搜索读取实际的⾏来检索表中的列信息,即表示select使用了覆盖索引而不必去回表查询;
  • using temporary(重点):数据库需要创建⼀张临时表来处理查询,这种情况常见于order by和group by。出现这种情况⼀般是要进⾏优化的,⾸先是想到⽤索引来优化;
  • using where:数据库将在存储引擎检索⾏后再进⾏过滤。就是先读取整⾏数据,再按where条件进⾏检查,符合就留下,不符合就丢弃;
  • using index condition:与Using where类似,查询的列不完全被索引覆盖,where条件中是⼀个前导列的范围;
  • using sort_union(…), Using union(…), Using intersect(…):这些函数说明如何为index_merge联接类型合并索引扫描;
  • using index for group-by:类似于访问表的Using index⽅式,Using index for group-by表示数据库发现了⼀个索引,可以⽤来查 询group by或distinct查询的所有列,⽽不要额外搜索硬盘访问实际的表;
  • null:查询的列未被索引覆盖,并且where筛选条件是索引的前导列,意味着⽤到了索引,但是部分字段未被索引覆盖,必须通过“回表”来实现,不是纯粹地⽤到了索引,也不是完全没⽤到索引,即使用了索引但需要回表操作,应该避免回表操作。
  • Using join buffer (Block Nested Loop):连表查询的方式,表示当被驱动表的没有使用索引的时候,MySQL会先将驱动表读出来放到 join buffer 中,再遍历被驱动表与驱动表进行查询。
MySQL慢查优化 循环/嵌套子查询(DEPENDENT SUBQUERY) 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。虽然 MySQL5.6 引入了物化特性,但需要特别注意它目前仅仅针对查询语句的优化。对于更新或删除需要手工重写成 JOIN。借助 explain 执行计划来分析索引失效的具体场景。看到 SQL 执行计划中select_type字段中出现“DEPENDENT SUBQUERY”时,要特别注意。来看一个SQL。 阅读详情

相关推荐

MySQL之执行计划

1)表的读取顺序2)数据读取操作的操作类型3)哪些索引可以使用4)哪些索引被实际使用5)表之间的引用6)每张表有多少行被优化器查3.执行计划包含的信息3.1id-获取select子句的操作表顺序,有几种情况1)id相同的情况下执行顺序是由上到下。......

weixin_62270300的博客 730

[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

案例梳理时间:2013-9-25 写在前面的话: 在慢查优化1和2里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助,甚至需要...

chuanxinhu2060的博客 510

避免过度使用MySQL子查询,特别是当出现DEPENDENT SUBQUERY标记时

这意味着子查询的执行依赖于外部查询的结果,每次外部查询执行一次时,都需要重新执行子查询。总结起来,尽管MySQL子查询是强大而灵活的工具,但过度使用可能会导致性能问题,特别是在出现DEPENDENT SUBQUERY标记时。此外,由于子查询依赖于外部查询的结果,每次外部查询执行时,都需要重新计算子查询。此外,连接操作可以减少查询的执行次数,因为它只需要执行一次,而不是每次外部查询执行一次。通过使用这些技巧,我们可以减少对子查询的依赖,提高查询性能,并避免DEPENDENT SUBQUERY问题的出现。

带你成为别人眼中的大佬! 349

SELECT 嵌套查询引起的 DEPENDENT SUBQUERY 问题

在使用select嵌套查询时,当外层查询和内层查询使用到同一张表的别名的时候,就可能由于执行器优化导致执行顺序出现问题,从而出现不太符合常规的结果。 先看一个例子: 例子中有两张表,如下所示: 表 department: 表employee: 表结构和数据都比较简单,下面看一段SQL代码: SELECT d.Name AS 'Department', e.Name AS 'Employee', e.Salary FROM Employ...

qq_37691909的博客 1108

西门子交换机环网冗余设置(实战篇2.2)

MRP的重组时间为 200ms 因此 PROFINET 通信必须选择大于 200ms 的看门狗时间,看门狗。ET200SP默认为 2ms*3=6ms) MRP 的重组时间为 200ms 故系统会报出看门狗超时。更新,默认是 3 个周期,超出设置的周期数就会报 IO 设备故障。时间不是直接配置的,而是作为没有 IO 数据可接受的更新周期,也就是允许几个周期没有数据。来达到大于 200ms 的看门狗时间的要求(看门狗时间 可接受更新周期数 更新时间)。是IO 控制器和 IO 设备)

weixin_42580591的博客 364

别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题

本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。

weixin_42523711的博客 433

mysql的执行计划_MySQL——执行计划

项目开发中,性能是我们比较关注的问题,特别是数据库的性能;作为一个开发,经常和SQL语句打交道,想要写出合格的SQL语句,我们需要了解SQL语句在数据库中是如何扫描表、如何使用索引的;MySQL提供explain/desc命令输出执行计划,我们通过执行计划优化SQL语句。下面我们以MySQL5.7为例了解一下执行计划:注:文中涉及到的表结构、sql语句只是为了理解explain/desc执行计划,...

weixin_34901243的博客 7497

使用电荷放大器处理压电加速度计输出

电阻器 R p模拟传感器的绝缘电阻,为产生的电荷创建泄漏路径。在此图中,顶部波形显示传感器产生的电荷,而底部波形显示电荷放大器的输出。这需要具有大输入阻抗的放大级,以防止产生的电荷通过与传感元件并联的放大器的输入阻抗泄漏。换句话说,电荷放大器补偿传感器产生的电荷 q p ,反馈电容器 C F中具有相反极性的等量电荷。因此,任何与传感器并联的绝缘电阻,如电缆的绝缘电阻或传感器的漏电电阻Rp,都不能流过电流。漂移是指电荷放大器输出在一段时间内发生的变化,而不是由被测物理参数的变化(我们讨论的加速度)引起的。

weixin_45260069的博客 3905

MySQL执行计划

MySQL 的 执行计划(Execution Plan) 是优化器根据 SQL 语句生成的查询执行路径的详细说明。通过分析执行计划,可以了解 MySQL 如何处理 SQL 查询(如索引使用情况、表连接顺序等),进而优化查询性能。

嗨,来了,累了把,歇息一下,暂时放下一切的纷纷扰扰,享受一份自己独处的时光 1684

Voxel Hashing技术解析:如何解决TSDF内存爆炸问题?

本文深入解析Voxel Hashing技术如何有效解决TSDF内存爆炸问题。通过动态内存分配和空间哈希函数设计,该技术将内存占用降低96.6%,同时保持高精度重建。文章详细介绍了GPU加速实现、现代系统演进及实践指南,为实时3D重建提供工程解决方案。

m2n3b4v5c6的博客 713

Social-Auto-Upload实战:如何用Python+Playwright实现抖音/B站/小红书一键三连发?

本文详细介绍了如何使用Python和Playwright框架构建Social-Auto-Upload自动化上传工具,实现抖音、B站、小红书等平台的一键多发布。通过模拟真实用户操作和Cookie管理技术,该工具能有效解决内容创作者跨平台发布的重复劳动问题,提升工作效率。

day7的博客 1400

MYSQL执行计划

简单来说,执行计划就像 SQL 语句的 “执行路线图”,通过分析它可以了解语句的性能瓶颈,进而优化查询效率。

xueyu188的博客 1098

Win10+pycharm+conda 配置Siammask 过程记录(新手向)

我们跑动demo 需要配置两个相关的文件这两个文件需要用 git 进行下载,对于不熟悉git的小伙伴 我这里给出连接,大家可以直接下载即可,并将其配置在 experiments文件夹下然后大家再需要在设置参数参数这里给出了。

C1137577723的博客 550

Mysql 执行计划

当客户端发送给mysql 服务器一条查询语句后,经过sql的优化器,会产生一个执行计划。 执行计划 使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MYSQL 是如何处理你的 sql 语句的。分析你的查询语句或是表结构的性能瓶颈。 语法: Explain + sql 执行计划的作用 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查 执行计划包含的信息 id:获取 select 子句的操作表顺序,有几种情况

jym的博客 7317

Matlab GUIDE -- 串口操作

1、首先新建-->应用程序-->GUIDE。 2、绘制一个简单的UI。 3、然后右击“打开串口”图标-->查看回调-->callback,即可打开此图标的回调函数,此回调函数是press button时执行(可按需要选择其他回调)。 4、在回调函数中添加打开串口的代码。 delete(instrfindall); %删除所有串口 s3 = serial('CO

Asgard-X 2837

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 620

MySql 执行计划

执行计划(execution plan,也叫查询计划或者解释计划)是 MySQL 服务器执行 SQL 语句的具体步骤。例如,通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序,分组和排序操作的实现方式等。负责生成执行计划的组件就是优化器,优化器利用表结构、字段、索引、查询条件、数据库的统计信息和配置参数决定 SQL 语句的最佳执行方式。如果想要解决慢查询的性能问题,首先应该查看它的执行计划。

TMesh的博客 1172

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

mysql有执行计划吗_MySql的执行计划

一。什么是数据库执行计划:MySQL执行计划是sql语句经过查询优化器后,查询优化器会根据用户的sql语句所包含的字段和内容数量等统计信息,选择出一个执行效率最优(MySQL系统认为最优)的执行计划,然后根据执行计划,调用存储引擎提供的接口,获取数据。执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。二。执行计划的查看方法:使用explain关键字可以模...

weixin_33995900的博客 311

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysql 执行计划详解_MySQL中SQL执行计划详解

MySQL执行计划是sql语句经过查询优化器后,查询优化器会根据用户的sql语句所包含的字段和内容数量等统计信息,选择出一个执行效率最优(MySQL系统认为最优)的执行计划,然后根据执行计划,调用存储引擎提供的接口,获取数据。但是,在MySQL执行的时候,到底使用了一个什么样的执行计划,有没有用到索引。当数据规模比较大的时候,sql执行的时候,执行计划不同,会直接影响sql的执行速度。这个时候,就...

weixin_32487565的博客 1440

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mysql 执行计划详解_MySQL 执行计划详解

我们经常使用 MySQL 的执行计划来查看 SQL 语句的执行效率,接下来分析执行计划的各个显示内容。执行计划的 idselect 查询的序列号,标识执行的顺序id 相同,执行顺序由上至下id 不同,如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行先看id 相同,执行顺序由上至下(本质是先查找表数据量小的表)普通的关联查询,先查询执行数据量小的表(执行计划的ID相同):id 不...

weixin_28893597的博客 475

【MySQL】MySQL的执行计划

MySQL的执行计划是一个描述如何执行SQL语句的详细说明。它包含了MySQL服务器如何执行查询以返回结果的所有信息,包括所使用的索引、连接类型、数据读取顺序等。通过查看和分析执行计划,我们可以找出查询中的瓶颈,从而进行针对性的优化。

weixin_46601559的博客 789

mysql 执行计划作用_Mysql中的执行计划

1.什么是执行计划使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。2.执行计划的作用表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询3.执行计划详解通过EXPLAIN关键分析的结果由以下列组成,接下来挨个分析每一个列3.1 ID列ID列:描述...

weixin_28954201的博客 376
上一篇: Mysql锁
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值