mysql explain的作用是什么?

mysql explain的作用是模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理用户的SQL语句,提高数据检索效率,降低数据库的IO成本。

mysql explain的作用是什么?

mysql explain的作用是:

模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。

mysql> explain select * from tb_user;+----+-------------+---------+------+---------------+------+---------+------+------+-------+| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra |+----+-------------+---------+------+---------------+------+---------+------+------+-------+|  1 | SIMPLE      | tb_user | ALL  | NULL          | NULL | NULL    | NULL |    1 | NULL  |+----+-------------+---------+------+---------------+------+---------+------+------+-------+

(一)id列:

(1)、id 相同执行顺序由上到下mysql> explain      -> SELECT*FROM tb_order tb1    -> LEFT JOIN tb_product tb2 ON tb1.tb_product_id = tb2.id    -> LEFT JOIN tb_user tb3 ON tb1.tb_user_id = tb3.id;+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+| id | select_type | table | type   | possible_keys | key     | key_len | ref                       | rows | Extra |+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+|  1 | SIMPLE      | tb1   | ALL    | NULL          | NULL    | NULL    | NULL                      |    1 | NULL  ||  1 | SIMPLE      | tb2   | eq_ref | PRIMARY       | PRIMARY | 4       | product.tb1.tb_product_id |    1 | NULL  ||  1 | SIMPLE      | tb3   | eq_ref | PRIMARY       | PRIMARY | 4       | product.tb1.tb_user_id    |    1 | NULL  |+----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+(2)、如果是子查询,id序号会自增,id值越大优先级就越高,越先被执行。mysql> EXPLAIN    -> select * from tb_product tb1 where tb1.id = (select tb_product_id from  tb_order tb2 where id = tb2.id =1);+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra       |+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+|  1 | PRIMARY     | tb1   | const | PRIMARY       | PRIMARY | 4       | const |    1 | NULL        ||  2 | SUBQUERY    | tb2   | ALL   | NULL          | NULL    | NULL    | NULL  |    1 | Using where |+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+(3)、id 相同与不同,同时存在mysql> EXPLAIN     -> select * from(select * from tb_order tb1 where tb1.id =1) s1,tb_user tb2 where s1.tb_user_id = tb2.id;+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+| id | select_type | table      | type   | possible_keys | key     | key_len | ref   | rows | Extra |+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+|  1 | PRIMARY     |  | system | NULL          | NULL    | NULL    | NULL  |    1 | NULL  ||  1 | PRIMARY     | tb2        | const  | PRIMARY       | PRIMARY | 4       | const |    1 | NULL  ||  2 | DERIVED     | tb1        | const  | PRIMARY       | PRIMARY | 4       | const |    1 | NULL  |+----+-------------+------------+--------+---------------+---------+---------+-------+------+-------+derived2:衍生表   2表示衍生的是id=2的表 tb1

相关学习推荐:mysql视频教程

(二)select_type列:数据读取操作的操作类型

  1、SIMPLE:简单的select 查询,SQL中不包含子查询或者UNION。

  2、PRIMARY:查询中包含复杂的子查询部分,最外层查询被标记为PRIMARY

  3、SUBQUERY:在select 或者WHERE 列表中包含了子查询

  4、DERIVED:在FROM列表中包含的子查询会被标记为DERIVED(衍生表),MYSQL会递归执行这些子查询,把结果集放到零时表中。

  5、UNION:如果第二个SELECT 出现在UNION之后,则被标记位UNION;如果UNION包含在FROM子句的子查询中,则外层SELECT 将被标记为DERIVED

  6、UNION RESULT:从UNION表获取结果的select

(三)table列:该行数据是关于哪张表

(四)type列:访问类型由好到差system > const > eq_ref > ref > range > index > ALL

1、system:表只有一条记录(等于系统表),这是const类型的特例,平时业务中不会出现。

DM建站系统律师事务所HTML5网站模板1.7 DM建站系统律师事务所HTML5网站模板1.7

DM建站系统律师事务所HTML5网站模板, DM企业建站系统。是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。DM系统的理念就是组装,把模板和区块组装起来,产生不同的网站效果。可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。DM企业建站系统安装步骤:第一步,先用phpmyadmin导入sql文件。 第二步:把文件放到你的本地服务器

DM建站系统律师事务所HTML5网站模板1.7 0 查看详情 DM建站系统律师事务所HTML5网站模板1.7

2、const:通过索引一次查到数据,该类型主要用于比较primary key 或者unique 索引,因为只匹配一行数据,所以很快;如果将主键置于WHERE语句后面,Mysql就能将该查询转换为一个常量。

3、eq_ref:唯一索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或者唯一索引扫描。

4、ref:非唯一索引扫描,返回匹配某个单独值得所有行,本质上是一种索引访问,它返回所有匹配某个单独值的行,就是说它可能会找到多条符合条件的数据,所以他是查找与扫描的混合体。

  详解:这种类型表示mysql会根据特定的算法快速查找到某个符合条件的索引,而不是会对索引中每一个数据都进行一 一的扫描判断,也就是所谓你平常理解的使用索引查询会更快的取出数据。而要想实现这种查找,索引却是有要求的,要实现这种能快速查找的算法,索引就要满足特定的数据结构。简单说,也就是索引字段的数据必须是有序的,才能实现这种类型的查找,才能利用到索引。

5、range:只检索给定范围的行,使用一个索引来选着行。key列显示使用了哪个索引。一般在你的WHERE 语句中出现between 、 、in 等查询,这种给定范围扫描比全表扫描要好。因为他只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引。

6、index:FUll Index Scan 扫描遍历索引树(index:这种类型表示是mysql会对整个该索引进行扫描。要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个复合索引的一部分,mysql都可能会采用index类型的方式扫描。但是呢,缺点是效率不高,mysql会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引)。

7、ALL:全表扫描 从磁盘中获取数据 百万级别的数据ALL类型的数据尽量优化。

(五)possible_keys列:显示可能应用在这张表的索引,一个或者多个。查询涉及到的字段若存在索引,则该索引将被列出,但不一定被查询实际使用。

(六)keys列:实际使用到的索引。如果为NULL,则没有使用索引。查询中如果使用了覆盖索引,则该索引仅出现在key列表中。覆盖索引:select 后的 字段与我们建立索引的字段个数一致。

(七)ken_len列:表示索引中使用的字节数,可通过该列计算查询中使用的索引长度。在不损失精确性的情况下,长度越短越好。key_len 显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出来的。

(八)ref列:显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列上的值。

(九)rows列(每张表有多少行被优化器查询):根据表统计信息及索引选用的情况,大致估算找到所需记录需要读取的行数。

(十)Extra列:扩展属性,但是很重要的信息。

1、 Using filesort(文件排序):mysql无法按照表内既定的索引顺序进行读取。 mysql> explain select order_number from tb_order order by order_money;+----+-------------+----------+------+---------------+------+---------+------+------+----------------+| id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows | Extra          |+----+-------------+----------+------+---------------+------+---------+------+------+----------------+|  1 | SIMPLE      | tb_order | ALL  | NULL          | NULL | NULL    | NULL |    1 | Using filesort |+----+-------------+----------+------+---------------+------+---------+------+------+----------------+1 row in set (0.00 sec)说明:order_number是表内的一个唯一索引列,但是order by 没有使用该索引列排序,所以mysql使用不得不另起一列进行排序。2、Using temporary:Mysql使用了临时表保存中间结果,常见于排序order by 和分组查询 group by。mysql> explain select order_number from tb_order group by order_money;+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+| id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows | Extra                           |+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+|  1 | SIMPLE      | tb_order | ALL  | NULL          | NULL | NULL    | NULL |    1 | Using temporary; Using filesort |+----+-------------+----------+------+---------------+------+---------+------+------+---------------------------------+1 row in set (0.00 sec)3、Using index 表示相应的select 操作使用了覆盖索引,避免访问了表的数据行,效率不错。如果同时出现Using where ,表明索引被用来执行索引键值的查找。如果没有同时出现using where 表明索引用来读取数据而非执行查找动作。mysql> explain select order_number from tb_order group by order_number;+----+-------------+----------+-------+--------------------+--------------------+---------+------+------+-------------+| id | select_type | table    | type  | possible_keys      | key                | key_len | ref  | rows | Extra       |+----+-------------+----------+-------+--------------------+--------------------+---------+------+------+-------------+|  1 | SIMPLE      | tb_order | index | index_order_number | index_order_number | 99      | NULL |    1 | Using index |+----+-------------+----------+-------+--------------------+--------------------+---------+------+------+-------------+1 row in set (0.00 sec)4、Using where 查找5、Using join buffer :表示当前sql使用了连接缓存。6、impossible where :where 字句 总是false ,mysql 无法获取数据行。7、select tables optimized away:8、distinct:

以上就是mysql explain的作用是什么?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/889058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
离线服务器Tableau许可证丢失终极解决方案!
上一篇 2025年11月28日 14:09:12
下一篇 2025年11月28日 14:09:24

相关推荐

  • win10蓝屏代码0x00000018如何办?

    一、准备工具 要应对win10出现的蓝屏错误代码0x00000018,我们需要提前准备一些必要的工具。建议下载并安装一款可靠的系统修复软件,例如“Windows Repair”或者“System Mechanic”。这类软件具备扫描和修复系统问题的功能,有助于解决蓝屏故障。 二、处理步骤 现在我们来…

    2026年8月30日
    000
  • 怎么查询mysql中所有表

    怎么查询mysql中所有表怎么查询mysql中所有表怎么查询mysql中所有表怎么查询mysql中所有表

    查询mysql数据库中所有表的方法:1、执行“mysql -u root -p”命令并输入密码来登录mysql数据库服务器;2、执行“USE 数据库名;”命令来切换到指定数据库;3、执行“show tables;”或“SHOW FULL TABLES;”命令,会以表格形式列出mysql数据库中的所有…

    2026年8月30日 用户投稿
    000
  • MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?

    MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?

    mysql 自带的全文检索功能在面对复杂搜索需求时存在明显不足,常见的整合方案包括 elasticsearch + mysql、sphinx + mysql 和 lucene/solr + mysql。1. mysql 全文检索缺点:仅支持基础分词和自然语言搜索,对中文支持弱,索引更新成本高,不支持…

    2026年8月30日 用户投稿
    000
  • 在 PHP 中为连续字符串姓名添加空格

    在 PHP 中处理姓名列表时,有时会遇到姓名连在一起的情况,例如 “NathanaelDousaMaxbergenRafaelSteen”。为了提高可读性,我们需要在每个姓名之间添加空格。本文将介绍如何使用 preg_replace 函数和正则表达式来实现这一目标。 preg…

    2026年8月30日
    000
  • vivo浏览器怎么找到离线网页_vivo浏览器已保存离线网页的查看路径

    可通过“我的收藏”、下载记录或文件管理器查找vivo浏览器保存的离线网页。首先打开vivo浏览器,点击底部菜单进入“我的收藏”,查找带“已离线”标签的网页;若未找到,进入“下载记录”查看类型为网页或HTML的项目;若仍无法定位,可打开文件管理器,在内部存储的Android/data/com.bbk.…

    2026年8月30日
    100
  • 余承东展示鸿蒙AI超级智能体 能订机票、网上购物等

    近日,华为常务董事、终端bg董事长余承东在微博上发布了一段视频,展示了鸿蒙ai超级智能体的功能。视频中,余承东演示了即将推出的ai新功能:只需发出语音指令,小艺便能自动操作手机调用去哪儿、华为商城、华为视频等多个应用,完成订机票、购买手机、缓存视频等复杂任务,全程无需人工干预。该功能的核心在于跨应用…

    2026年8月30日
    100
  • 上周造车新势力销量排名公布 小鹏理想小米又是前三!

    2月25日,中国汽车市场数据新鲜出炉!上周(2月17日至2月23日)汽车总销量达37.4万辆,新能源汽车销量突破20.1万辆,新能源渗透率高达53.7%,创下今年新高。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 细看造车新势力销量榜,小…

    2026年8月30日
    100
  • mysql怎么实现分组求和

    实现方法:1、利用SELECT语句查询指定表中的数据;2、利用“GROUP BY”关键字根据一个或多个字段对查询结果进行分组;3、利用SUM()函数根据分组情况分别返回不同组中指定字段的总和,语法为“SELECT SUM(进行求和的字段名) FROM 表名 GROUP BY 需要进行分组的字段名;”…

    2026年8月30日
    000
  • mysql怎么将字段修改为not null

    mysql怎么将字段修改为not nullmysql怎么将字段修改为not nullmysql怎么将字段修改为not nullmysql怎么将字段修改为not null

    在mysql中,可以通过使用ALTER TABLE语句给字段添加非空约束来将字段修改为not null,语法“ALTER TABLE 数据表名 CHANGE COLUMN 字段名 字段名 数据类型 NOT NULL;”。ALTER TABLE语句用于修改原有表的结构,而“NOT NULL”是设置非空…

    2026年8月30日 用户投稿
    000
  • mysql怎么修改存储引擎为innodb

    mysql怎么修改存储引擎为innodbmysql怎么修改存储引擎为innodbmysql怎么修改存储引擎为innodbmysql怎么修改存储引擎为innodb

    两种修改方法:1、使用SET语句临时修改默认存储引擎,语法为“SET default_storage_engine=innodb;”,当重启客户端后就会恢复为原引擎类型。2、使用ALTER TABLE语句修改,语法“ALTER TABLE 表名 ENGINE=innodb;”,可以修改指定表的引擎类…

    2026年8月30日 用户投稿
    100
  • 全球首个混合推理模型:Claude 3.7 Sonnet来袭,真实编码力压一切对手

    全球首个混合推理模型:Claude 3.7 Sonnet来袭,真实编码力压一切对手全球首个混合推理模型:Claude 3.7 Sonnet来袭,真实编码力压一切对手全球首个混合推理模型:Claude 3.7 Sonnet来袭,真实编码力压一切对手全球首个混合推理模型:Claude 3.7 Sonnet来袭,真实编码力压一切对手

    anthropic发布迄今为止最强大的ai模型:claude 3.7 sonnet Anthropic于近日正式发布了其最新旗舰模型——Claude 3.7 Sonnet,这款混合推理模型被誉为目前市面上最智能的AI模型之一。 Sonnet具备两种思考模式:标准模式和扩展模式,前者提供近乎即时的响应…

    2026年8月30日 用户投稿
    100
  • 《全面战争:战锤3》新补丁发布 全面调整魔法物品

    creative assembly仍在持续优化《全面战争:战锤3》,其调整节奏虽缓慢却坚定,犹如矮人军团行进的步伐。今年三月,开发商对广受批评的基斯里夫派系进行了彻底重做,使这支骑乘北极熊的人类势力更具可玩性。而现在,官方又推出新补丁,将目光投向另一个亟需深度重构的系统——魔法物品机制。 在《全面战…

    2026年8月30日
    000
  • 如何在Laravel中使用JSON键解决Eloquent关系问题?staudenmeir/eloquent-json-relations助你提升数据库查询效率

    最近在开发一个 laravel 项目时,我遇到一个挑战:需要在用户和角色之间建立多对多关系,但角色信息存储在用户模型的 json 字段中。传统的 eloquent 关系无法直接处理这种情况,导致我在实现关系时遇到了诸多困难。经过一番探索,我找到了 staudenmeir/eloquent-json-…

    用户投稿 2026年8月30日
    000
  • 抖音精选特效怎么用_抖音精选热门视频特效制作教程

    抖音精选特效怎么用_抖音精选热门视频特效制作教程抖音精选特效怎么用_抖音精选热门视频特效制作教程抖音精选特效怎么用_抖音精选热门视频特效制作教程抖音精选特效怎么用_抖音精选热门视频特效制作教程

    首先检查抖音是否为最新版本并更新,其次清除缓存、重启应用,确保相机与麦克风权限已开启;最后可通过剪映使用画中画与关键帧模拟热门特效,或在抖音内使用AI工具上传照片生成特效视频。 如果您在抖音拍摄视频时发现精选特效无法正常使用或想要了解如何制作热门的特效内容,可能是由于特效加载失败、权限设置不当或操作…

    2026年8月30日 用户投稿
    200
  • 如何使用Composer解决PHP代码规范和测试问题?ghostwriter/coding-standard助你提升代码质量

    可以通过以下地址学习 Composer:学习地址 在开发 php 项目时,保持代码的一致性和高质量是至关重要的。然而,管理代码规范和运行各种测试工具常常是一个复杂且耗时的过程。我曾在一个项目中遇到了这样的难题:需要确保所有开发人员遵循相同的代码规范,同时需要高效地运行单元测试和静态代码分析工具。经过…

    用户投稿 2026年8月30日
    000
  • MyBatis插入数据时ID为空导致NullPointerException,如何解决?

    MyBatis插入数据时ID为空引发的NullPointerException及解决方案 在使用MyBatis进行数据库插入操作时,若主键ID未赋值为NULL,则可能抛出NullPointerException异常。本文将通过一个案例分析问题根源并提供解决方案。 问题描述: 开发者在使用MyBati…

    2026年8月30日
    000
  • VSCode怎么把Markdown保存_VSCode导出和转换Markdown文件格式教程

    答案是使用自动保存、Git版本控制和插件如Markdown PDF与Pandoc可高效保存并转换Markdown;通过相对路径管理图片、自定义CSS或Pandoc模板可避免导出格式错乱。 VSCode保存Markdown文件非常直接,它有自动保存功能,手动Ctrl+S也随时可用。至于导出和转换,这通…

    2026年8月30日
    000
  • MySQL存储过程调试流程详解_Sublime插件支持语法结构高亮检查

    MySQL存储过程调试流程详解_Sublime插件支持语法结构高亮检查MySQL存储过程调试流程详解_Sublime插件支持语法结构高亮检查MySQL存储过程调试流程详解_Sublime插件支持语法结构高亮检查MySQL存储过程调试流程详解_Sublime插件支持语法结构高亮检查

    mysql存储过程调试困难,核心解决策略包括:1.利用select语句输出变量值;2.写入日志表记录执行状态;3.使用signal抛出错误中断流程;4.sublime text辅助代码检查。由于mysql缺乏原生调试器,通常通过运行时输出信息观察程序状态,如在关键逻辑插入select查看变量、将调试…

    2026年8月30日 用户投稿
    000
  • edge怎么设置页面主题-edge设置页面主题的方法

    edge怎么设置页面主题-edge设置页面主题的方法edge怎么设置页面主题-edge设置页面主题的方法edge怎么设置页面主题-edge设置页面主题的方法edge怎么设置页面主题-edge设置页面主题的方法

    microsoft edge 是微软基于 chromium 开源项目打造的现代化浏览器,具备高效、安全和流畅的上网体验。它兼容 windows、macos、ios 和 android 等多个平台,并与 microsoft 生态深度整合,支持 bing ai 智能搜索、office 365 协作等特色…

    2026年8月30日 用户投稿
    200
  • MySQL中脑裂是什么

    在MySQL中,脑裂是指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。 对于无状态服务的HA系统,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。 本教程操…

    2026年8月30日
    100

发表回复

登录后才能评论
关注微信