首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql的explain的底层原理是什么呢?

MySQL的EXPLAIN是一个非常有用的工具,用于分析查询语句的执行计划。它可以帮助开发者了解查询语句的执行过程,以及查询优化器如何选择索引和表。EXPLAIN的底层原理主要包括以下几个方面:

  1. 查询优化器:MySQL查询优化器是MySQL在执行查询前对查询进行优化的核心组件。它会根据查询语句、表结构、索引等信息,选择最佳的执行计划。
  2. 查询语法解析:在查询优化器之前,MySQL会对查询语句进行语法解析,将查询语句转换为内部数据结构,以便查询优化器进行优化。
  3. 索引选择:查询优化器会根据查询条件和索引信息,选择最佳的索引来加速查询。这包括选择合适的索引、索引合并、索引覆盖等策略。
  4. 表连接顺序:查询优化器会根据查询条件和表之间的关系,选择合适的表连接顺序。这可能包括选择嵌套循环连接、合并连接、排序归并连接等策略。
  5. 执行计划生成:查询优化器会根据选定的索引、表连接顺序等信息,生成最终的执行计划。这个执行计划包括使用哪些索引、表连接顺序、筛选条件等信息。
  6. 执行计划展示EXPLAIN会将生成的执行计划以表格形式展示出来,方便开发者理解和分析。

在使用EXPLAIN时,需要注意以下几点:

  • 不同的MySQL版本和存储引擎可能会有不同的执行计划生成策略。
  • 在分析执行计划时,需要关注执行计划中的typekeyrowsExtra等列,以了解查询的性能瓶颈和优化点。
  • 在优化查询时,需要根据实际情况调整索引、表结构、查询语句等方面的内容,以提高查询性能。

推荐的腾讯云相关产品:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

servlet底层实现原理是什么

这样底层和复杂机器环境比如网络或Tomcat打交道工作,Servlet 编写者就不用考虑了!...servlet只需要考虑一段时期(Session)相关请求(Request)响应(Response)系列就可以了。客户端 把它想要发给服务器数据,存放在Request当中。...而服务器把它想给客户端数据,存在Response当中。如果跨越几个Request- Response交互。数据就可以放在Session当中。...事实证明它 市场占有率非常高,尤其比Sun Application Server高很多。这就是为什么我们要用Tomcat来学习部署servlet。...它需要靠jdk编译servletjava文件成为class文件。之后,JRE来运行class文件。所以在之后实验过程当中, 我们要注意jdk和jre版本统一问题。

65120
  • Hash索引底层原理是什么

    MySQL Hash 索引 ? Hash 索引与 B+ 树索引区别 Hash 索引不能进行范围查询,而 B+ 树可以。...这是因为 Hash 索引指向数据是无序,而 B+ 树叶子节点是个有序链表。 Hash 索引不支持联合索引最左侧原则(即联合索引部分索引无法使用),而 B+ 树可以。...Hash 索引不支持 ORDER BY 排序,因为 Hash 索引指向数据是无序,因此无法起到排序优化作用,而 B+ 树索引数据是有序,可以起到对该字段 ORDER BY 排序优化作用。...总结 MySQL Memory 存储引擎支持 Hash 存储,如果我们需要用到查询临时表时,就可以选择 Memory 存储引擎,把某个字段设置为 Hash 索引 MySQL InnoDB 存储引擎还有个...“自适应 Hash 索引”功能,就是当某个索引值使用非常频繁时候,它会在 B+ 树索引基础上再创建一个 Hash 索引,这样让 B+ 树也具备了 Hash 索引优点。

    1.3K30

    MySQL 有几种Join,其底层实现原理是什么?

    mysql只支持一种join算法:Nested-Loop Join(嵌套循环连接),但Nested-Loop Join有三种变种: 原理: 1.Simple Nested-Loop Join: 如下图...在查询时,驱动表(r)会根据关联字段索引进行查找,挡在索引上找到符合值,再回表进行查询,也就是只有当匹配到索引以后才会进行回表查询。...可以看到中间有个join buffer缓冲区,是将驱动表所有join相关列都先缓存到join buffer中,然后批量与匹配表进行匹配,将第一种多次比较合并为一次,降低了非驱动表(s)访问频率。...默认情况下join_buffer_size=256K,在查找时候MySQL会将所有的需要列缓存到join buffer当中,包括select列,而不是仅仅只缓存关联列。...使用是Index Nested-Loop Join,先对驱动表a主键筛选,得到一条,然后对非驱动表b索引进行seek匹配,预计得到一条数据。 下面这种情况没用到索引: ?

    2.7K30

    mysqlexplain详解

    500多万条数据,我explain了一下: explain SELECT * FROM article WHERE (id < 4054495) AND (book_id = '5164') ORDER...然后我马上看了下idx_1是什么索引 ,idx_1(book_id)这个没有使用到。...基于mysql查询,更多是注重扫描查询行数,以及是否使用到索引,我常看最重要是扫描rows字段,然后就key字段,看下extra属性,这样就基本能解决问题了。...字段:possible_keys 解释:可能用到索引 字段:key 解释:实际用到索引 常见值及其说明: MySQL决定实际用到索引,显示是索引名称,多个索引用逗号隔开,如果没有 ,则为null...using temporary:mysql需要创建一张临时表来保存中间结果。也就是说,需要先把数据放到临时表中,然后从临时表中获取需要数据。

    39430

    MySQL EXPLAIN 使用

    EXPLAIN解释: table:显示这一行数据是关于哪张表 type:这是重要列,显示连接使用了何种类型。...很少情况下,MYSQL会选择优化不足索引。...在不损失精确性情况下,长度越短越好 ref:显示索引哪一列被使用了,如果可能的话,是一个常数 rows:MYSQL认为必须检查用来返回请求数据行数 Extra:关于MYSQL如何解析查询额外信息...:一旦MYSQL找到了与行相联合匹配行,就不再搜索了 Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准行,就不再搜索了 Range checked...因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待 eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键全部时使用

    49010

    IBCS虚拟专线底层实现原理是什么

    IBCS虚拟专线是基于二层网络架构IP专线技术,不是服务器端口转发,也不是内网穿透。它是目前云服务非常火一个产品。图片其原理可以概括如下:云服务提供商:IBCS企业专线实现离不开云服务提供商。...云服务提供商会在企业本地网络和其云服务之间建立一种安全、高速连接通道。高速网络连接:IBCS企业专线使用高速网络连接将企业本地网络与云服务提供商数据中心相连。...这种连接通道能够提供较低延迟和较高带宽,使得本地网络能够与云服务之间实现快速、稳定通信。隧道和加密:为了保证数据传输安全性,IBCS企业专线通常使用隧道技术和加密机制来加密数据流。...总的来说,IBCS企业专线通过在企业本地网络与云服务提供商之间建立安全、高速连接通道,使得企业能够在本地体验和使用公有云一致云服务。...这种连接通道能够提供低延迟、高带宽数据传输,同时通过加密和隧道技术保证数据传输安全性。这样,企业可以充分利用云服务提供商基础设施和资源,提升业务灵活性和效率。

    81300

    Mysql Explain主要字段

    这可能是除了system和const之外最好类型。 当主键或唯一非NULL索引所有字段都被用作join联接时会使用此类型。 eq_r ef可用于使用’='操作符作比较索引列。...比较值可以是常量,也可以是使用在此表之前读取表达式。 相对于下面的ref区别就是它使用唯一索引,即主键或唯一索引,而ref使用是非唯一索引或者普通索引。...4、ref 对于来自前面表每一行,在此表索引中可以匹配到多行。若联接只用到索引最左前缀或索引不是主键或唯一索引时, 使用ref类型(也就是说,此联接能够匹配多行记录)。...要注意,全文索引优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引 6、ref_or_null 跟ref类型类似,只是增加了null值比较。实际用不多。...这里包含两种情况: 一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快, 12ALl 没有使用索引,全表扫描 12. extra(重要)     EXplain

    1.4K20

    关于Mysqlexplain工具

    当你运行一条sql执行很慢时候,可以使用explain sql,"explain"相当于mysql优化器,可以很好分析性能瓶颈。 ?...如上图,就是explain执行效果,查询出很多字段,我们主要关注其中比较重要几个 type:访问类型,性能从高到低NULL>system>const>eq_ref>ref>fulltext>ref_or_null...unique_subquery>index_subquery>range>index>ALL const:通过索引一次就找到,用到了主键或唯一索引,匹配一行所以很快 index_merge:索引合并优化方法...range:使用指定范围行语句出现between、、in等 index:只遍历索引树查询 all:全表查询 key:使用到索引 rows:找到结果所需要读取行 官网解释:https...://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-join-types

    41330

    谈谈MYSQLExplain

    前言我们在设计一个系统时候,有时候通常为了基础业务,写出查询sql语句并不高效,从而影响到用户使用系统整体体验感不是很好,我们通常在系统测试阶段会开启MySQL慢日志查询功能,可以在MySQL...了,从而就可以对这些语句进行调优优化,使用 Explain来分析 SQL 语句性能。...=3#慢查询日志以文件形式输出log_output=FILE基本介绍 Explain被称为执行计划,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行...Explain结果是基于数据表中现有数据Explain结果与MySQL版本有很大关系,不同版本优化器优化策略不同。...语法:explain sql语句示例:mysql> explain select * from actor;+----+-------------+-------+------+------------

    25821

    4.vue 双向绑定原理是什么?_vue双向绑定底层原理

    相反,根据道具值使用数据或计算属性。 道具被变异:“number1” 这时候要完成双向绑定怎么办? 红色异常显示,希望在data中定义一个其它属性。...1、代码实例 但是,我想通过反向传到父组件中,也就是改变number1值,也就是改变data中num1,怎么整?...,是上面写法一种变形写法。...那么如何传递? 官方提到: 通过props向子组件传递数据; 通过事件向父组件传递数据; 一般不推荐使用children,children一般用于拿到所有组件时候使用。 <!...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.4K40

    MySQLexplain几点用法

    MySQLexplain命令内容还是很丰富,值得好好挖掘出不少东西来。...本身来说explain就是生成执行计划内容,如果细看,这个内容和Oracle explain plan for结果相比还是有差距。...首先是一个比较实际用法,查询语句我们可以查看执行计划,如果是DML语句,他是直接变更了还是只是生成执行计划而已,明白这一点很重要。...MySQL 5.6 5.6中结果来看,是支持,那么最关心问题,数据会不会变更。...我们假设一个场景,有一个SQL语句执行效率很差,我们通过show processlist可以看到,但是语句效率为什么这么差,一个行之有效分析问题方法就是查看执行计划,好了,回到问题核心,那就是怎么得到语句执行计划

    1.7K70

    weak底层原理

    我们经常会使用weak来解决OC中循环引用问题,因为weak不会使引用计数加1;并且weak修饰指针还会在对象被销毁后自动置空,这有效解决了野指针调用问题。...那么weak 底层原理是怎样?我们接下来就来分析一下。 首先随便在一个工程中,写入下面类似的代码,然后在weak那行打断点: ? 运行到断点处,转成汇编分析: ?...3.1 weak_table_t 先来看看weak_table_t底层代码: /** * The global weak references table....到这里位置,我们实际上就已经介绍完了【对一个对象做weak操作时候底层所做事情】: 首先,会有一张SideTable散列表,这个散列表包含了引用计数表、弱引用表等; 然后,散列表里面会有一张全局弱引用表...我们可以看到,在整个流程中,都没有对引用计数操作,因此,weak修饰指针并不会使对象引用计数加1。 我们知道,weak指针会在其所指向对象被销毁时候自动置为nil,这是怎么做到

    97332

    MYSQL explain 可没有那么简单,explain猫腻与函数

    explain 到底会不会执行命令着一点很多人应该是不置可否任务,他不能执行命令,而仅仅是对语句进行评估然后反馈执行计划。...所以这里第一点问题是,函数尽量不要带有和表有关操作。如果带有和表有关操作则在explain情况下会出现上面的问题,想象中是查看执行计划,但结果是操作了这个语句。...那么出现这样问题,如果要进行执行计划查看,但是又不想不运行这个函数,可以通过在执行explain 语句情况前添加事务方法,来规避一些风险。...同时在MYSQL 8 中后续命令 explain analyze 命令是否也有这个问题我们看一下,从下面的图可以看出,MYSQL 8 中新添加了 explain ananlyze 实际上在命令安全方面和之前没有太大变化...关于MYSQL 8 中 explain analyze 这个命令如果感兴趣可以查看 https://mysqlserverteam.com/mysql-explain-analyze/ 这里有详细说明和使用方法

    86420

    热成像测温原理是什么?你知道吗?

    前言: 发热是新冠肺炎最常见症状表现,因此测量体温成为了疫情防控重要手段。...在某些人流量大场合,如机场、车站、医院、学校等,传统体温测量方式效率低,难于满足需求,因此我们看到热成像测温在这些场景中应用。 那么热成像测温原理是什么?...红外线是一种电磁波,具有与无线电波和可见光一样本质。红外线发现是人类对自然认识一次飞跃。...现代红外热像仪工作原理是使用光电设备来检测和测量辐射,并在辐射与表面温度之间建立相互联系。所有高于绝对零度(-273℃)物体都会发出红外辐射。...通俗地讲红外热像仪就是将物体发出不可见红外能量转变为可见热图像。热图像上面的不同颜色代表被测物体不同温度。

    74410

    MySQLexplain结果​字段介绍

    MySQLexplain结果字段介绍(二) 昨天说完了执行计划前四个字段,今天说说后面几个字段吧。...我们看看explain基本语法和输出内容: mysql ::>>explain select ; +----+-------------+-------+------+---------------+...myisam,然后使用explain语句查看,那么这个时候type值就是system,如果这个时候再次插入一条记录: mysql:yeyztest 17:41:13>>insert into test_explain...字段值就是ref ref 当我们通过普通二级索引和常量进行等值比较时候,那么对于这个表访问方法就是ref,看看例子: mysql:yeyztest 18:13:41>>explain select...index_subquery 这个和上面一样,但是in条件中子查询使用是a_key_var普通索引字段,而不是id字段: mysql:yeyztest 18:53:30>>explain select

    8.5K10

    面试常考问题:Java泛型底层原理是什么

    那么,我们目标是什么?就是要获取UserInfoOperator#process(String s) 方法参数类型java.lang.String。...其中 public 很好理解,但是其中 [synthetic bridge] 是怎么来?...图 方法访问标志(来源:深入理解 Java 虚拟机(第三版)) 到此,可以确定是,其中一个process 方法,是编译器自动产生桥接方法。那么为什么编译器会产生桥接方法?...但在此之后,不禁会想:除了上述示例,还有哪些情况下,编译器也会自动生成桥接方法?我们继续深入研究。 类继承 通过查阅相关资料,我们考虑如下一种情况: /** * 如下会产生桥接方法吗?...以上,笔者罗列了几种编译器为我们自动生成桥接方法情况。那么是否还有其他场景下,编译器也会生成桥接方法?如果您也曾研究过或者使用过 bridge 方法,欢迎交流讨论。

    1.4K12
    领券