首页
学习
活动
专区
圈层
工具
发布

mysql中查看执行计划

MySQL中查看执行计划

基础概念

MySQL的执行计划是数据库管理系统在执行SQL查询时所遵循的一系列步骤。这些步骤描述了如何从表中检索数据,以便优化查询性能。执行计划由MySQL的查询优化器生成,它考虑了多种因素,如表的大小、索引的存在、数据的分布等。

相关优势

  • 性能优化:通过查看执行计划,可以了解查询是如何执行的,从而找出潜在的性能瓶颈。
  • 索引使用情况:执行计划会显示哪些索引被使用,哪些没有被使用,帮助开发者决定是否需要添加或修改索引。
  • 查询改写建议:有时,执行计划会提示可以通过改写查询来提高性能。

类型

MySQL提供了多种工具来查看执行计划,其中最常用的是EXPLAIN命令。

应用场景

  • 当你遇到慢查询时,查看执行计划可以帮助你理解查询为何缓慢。
  • 在优化数据库性能时,了解执行计划可以帮助你做出更明智的决策。
  • 在设计新的数据库结构或查询时,查看执行计划可以提供宝贵的洞察。

如何查看执行计划

要查看MySQL查询的执行计划,可以在查询语句前加上EXPLAIN关键字。例如:

代码语言:txt
复制
EXPLAIN SELECT * FROM users WHERE age > 30;

执行上述命令后,MySQL会返回一个表格,其中包含了查询的执行计划信息,如表的访问方式、使用的索引、排序和限制等信息。

遇到的问题及解决方法

问题:执行计划显示某个查询没有使用索引。

原因:

  1. 查询条件中的列没有被索引。
  2. 查询条件使用了函数或操作符,导致索引失效。
  3. 数据分布不均,使得索引效率降低。

解决方法:

  1. 确保查询条件中的列已经被索引。
  2. 避免在查询条件中使用函数或操作符,或者考虑创建覆盖索引。
  3. 分析数据分布,必要时进行数据重分布或优化索引策略。

参考链接

MySQL EXPLAIN Output Format

通过上述方法,你可以有效地查看和分析MySQL查询的执行计划,从而优化数据库性能。

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

相关·内容

Mysql中explain命令查看执行计划

前言 使用explain命令可以查看一条查询语句的执行计划,这篇文章记录一下查询计划的各个属性的值极其含义. ? 那么我们按照图中的顺序逐个字段的看一下....本文采用官网的数据库样本,下载地址:[MySQL官方数据库](https://dev.mysql.com/doc/index-other.html) id 一组数据,表示任务被执行的顺序,序号越大的任务越先执行...,例如上文的第三个例子 table 查询的数据表,当从衍生表中查数据时会显示 x 表示对应的执行计划id。...常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找 eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。...Using filesort 表示使用了文件排序,即查询中的排序无法通过索引来完成. 参考文章 MySQL官方文档 完。

2.6K10
  • MySQL Explain查看执行计划

    我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。...(QEP:sql生成一个执行计划query Execution plan) mysql> explain select * from user; expain出来的信息有10列,分别是id、select_type...如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引...要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。...SELECT后查看执行计划。

    2.9K30

    MySQL(九)|如何查看执行计划(Explain)

    我们经常会使用Explain去查看执行计划,这个众所周知。但我在面试时问面试者,你用Explain主要是看什么?对方的回答大多是“查看是否有使用到索引”,很显然我对这个回答不太满意。...今天我们就来说一说Explain中的“Type”和“Extra”。 一、Explain中的“Type” ?...Explain中的“Type” MySQL的官网解释为:连接类型(the join type)。它描述了找到所需数据使用的扫描方式。...非唯一索引,等值匹配,可能有多行命中 range:索引上的范围扫描,例如:between/in/> index:索引上的全集扫描 ALL最慢:全表扫描(full table scan) 二、Explain中的...| 1分钟系列》 测试的MySQL版本为InnoDB 5.7.22

    3K51

    MySQL中的执行计划

    详细对MySQL中执行计划每个字段的解释 1.概述 ​ 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式...如果需要查询具体的执行计划,可通过在查询语句前追加EXPLAIN进行查看,例如: flink_data_qnh> EXPLAIN SELECT 1 +--+-----------+-----+-----...+--------+--------------+ ​ 除了以SELECT开头的查询语句,其余的DELETE、INSERT、REPLACE以及UPDATE语句前边都可以加上EXPLAIN这个词儿,用来查看这些语句的执行计划...,比如去重、排序之类的,比如我们在执行许多包含DISTINCT、GROUP BY、UNION等子句的查询过程中,如果不能有效利用索引来完成查询,MySQL很有可能寻求通过建立内部的临时表来执行查询。...4.总结 ​ 以上介绍了EXPLAIN中各个字段的含义,通过EXPLAIN可以查询出可以有效的帮助我们了解SQL脚本的执行情况。 参考 《MySQL是怎么样运行的》

    1.4K20

    MySQL中SQL执行计划详解

    MySQL执行计划是sql语句经过查询优化器后,查询优化器会根据用户的sql语句所包含的字段和内容数量等统计信息,选择出一个执行效率最优(MySQL系统认为最优)的执行计划,然后根据执行计划,调用存储引擎提供的接口...但是,在MySQL执行的时候,到底使用了一个什么样的执行计划,有没有用到索引。当数据规模比较大的时候,sql执行的时候,执行计划不同,会直接影响sql的执行速度。...MySQL我们在调试sql语句的时候,不会像我们写Java或者其他语言代码那样通过打断点的方式进行代码调试。这个时候,我们就需要通过查看执行计划来调试我们的sql了。...MySQL通过EXPLAIN来查看执行计划,我们写sql语句的时候,在语句之前加一个EXPLAIN就可以了。...No tables used 查询没有FROM子句 Not exists 查询的内容不存在 Plan isn't ready yet 优化程序尚未完成为在命名连接中执行的语句创建执行计划时, 会出现此值

    4.5K20

    查看MySQL执行计划的几种方法以及格式说明

    我们知道,执行计划是关系型数据库诊断SQL性能问题很重要的一种手段,Oracle中获取执行计划有很多种方式,不同方式有各自的优缺点,可以参考《查询执行计划的几种方法》。...同样,MySQL支持显示他的执行路径,参考了这篇博主文章《查看MySQL查询计划的方法和格式》,看下如何得到MySQL的执行计划。     ...MySQL的查询计划是分析查询的重要方法,可以通过使用EXPLAIN语句来确认优化器将采取哪种查询计划,是否与你的预期一致。...可视化输出,可以通过MySQL Workbench可视化查看MySQL的执行计划。通过点击Workbench的放大镜图标,即可生成可视化的查询计划,

    1.1K30

    查看MySQL执行计划的几种方法以及格式说明

    我们知道,执行计划是关系型数据库诊断SQL性能问题很重要的一种手段,Oracle中获取执行计划有很多种方式,不同方式有各自的优缺点,可以参考《查询执行计划的几种方法》。...同样,MySQL支持显示他的执行路径,参考了这篇博主文章《查看MySQL查询计划的方法和格式》,看下如何得到MySQL的执行计划。...MySQL的查询计划是分析查询的重要方法,可以通过使用EXPLAIN语句来确认优化器将采取哪种查询计划,是否与你的预期一致。 使用EXPLAIN有两种方式, ?...可视化输出,可以通过MySQL Workbench可视化查看MySQL的执行计划。通过点击Workbench的放大镜图标,即可生成可视化的查询计划, ? ?

    2.7K10

    (4) MySQL中EXPLAIN执行计划分析

    执行计划能告诉我们什么? SQL如何使用索引 联接查询的执行顺序 查询扫描的数据函数 二. 执行计划中的内容 SQL执行计划的输出可能为多行,每一行代表对一个数据库对象的操作 1....ID值不同时,ID值越大代表优先级越高,则越先被执行 演示 可以看到上面的执行计划返回了3行结果,id列的值可以看作是SQL中所具有的SELECT操作的序号 由于上述SQL中只有一个SELECT,...所以id全为1,因此,我们就要按照由上至下读取执行计划 按照我们的SQL语句,我们会认为执行顺序是a,b,c,但是通过上图可以发现,Mysql并不是完成按照SQL中所写的顺序来进行表的关联操作的 执行对表的执行顺序为...a,c,b,这是由于MySQL优化器会根据表中的索引的统计信息来调整表关联的实际顺序 2....执行计划的限制 无法展示存储过程,触发器,UDF对查询的影响 无法使用EXPLAIN对存储过程进行分析 早期版本的MySQL只支持对SELECT语句进行分析

    1.7K20

    Mysql执行计划

    avgscoreFROMscWHEREsc.score = 2) tmp ON tmp.Sid = student.SId用执行计划分析...sqlAEXPLAIN sqlA分析执行计划的返回结果idid 是 select 的执行顺序,id 越大优先级越高,越先被执行,id 相同时下面的先执行.select_typeselect_type说明...SYSTEM系统,表仅有一行(=系统表)possible_keys预计可能使用的索引,在不和其他表进行关联的时候,查询表时可能使用的索引key实际查询的过程中使用的索引,显示 MySQL 在查询中实际使用的索引...use index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...执行计划详解 - 云+社区 - 腾讯云 (tencent.com)MySQL索引创建及使用_程序人生-CSDN博客_mysql建立索引

    2.1K10

    Mysql执行计划

    FROM sc WHERE sc.score = 2 ) tmp ON tmp.Sid = student.SId 用执行计划分析...sqlA EXPLAIN sqlA 分析执行计划的返回结果 id id 是 select 的执行顺序,id 越大优先级越高,越先被执行,id 相同时下面的先执行. select_type select_type...SYSTEM 系统,表仅有一行(=系统表) possible_keys 预计可能使用的索引,在不和其他表进行关联的时候,查询表时可能使用的索引 key 实际查询的过程中使用的索引,显示 MySQL 在查询中实际使用的索引...use index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...练习题 MySQL 执行计划详解 - 云 + 社区 - 腾讯云 (tencent.com) MySQL 索引创建及使用_程序人生-CSDN 博客_mysql 建立索引

    1K10

    如何使用 EXPLAIN 精准查看执行计划?

    在上一篇中 如何使用慢查询快速定位执行慢的 SQL?...比如想要对comment_id=500000 或者user_id=500000的数据进行查询,数据表中 comment_id 为主键,user_id 是普通索引,我们可以查看下执行计划: EXPLAIN...比如我们想要对user_id=500000的评论进行查询,使用 EXPLAIN 查看执行计划: EXPLAIN SELECT comment_id, comment_text, user_id FROM...假设我们对product_comment表和 usre 表进行联查,关联条件是两张表的 user_id 相等,使用 EXPLAIN 进行执行计划查看: EXPLAIN SELECT * FROM product_comment...我们在查看执行计划的时候,通常希望执行计划至少可以使用到 range 级别以上的连接方式,如果只使用到了 all 或者 index 连接方式,我们可以从 SQL 语句和索引设计的角度上进行改进。

    1.5K20

    MySQL执行计划解读

    EXPLAIN EXTENDED SELECT …… 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2....EXPLAIN PARTITIONS SELECT …… 用于分区表的EXPLAIN 执行计划包含的信息 ? id 包含一组数字,表示查询中执行select子句或操作表的顺序 ?...f.const、system:当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量 ?...MySQL执行计划的局限 •EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况 •EXPLAIN不考虑各种Cache •EXPLAIN不能显示MySQL在执行查询时所作的优化工作...•部分统计信息是估算的,并非精确值 •EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划

    2K10

    MySQL 中执行计划分析——Optimizer trace表

    Optimizer trace的基本使用,以及优化过程中的含义 MySQL 中执行计划分析 - Optimizer trace表 [TOC] 1....概述 对于 MySQL 5.6 以及之前的版本来说,查询优化器就像是一个黑盒子一样,你只能通过 EXPLAIN 语句查看到最后优化器决定使用的执行计划,却无法知道它为什么做这个决策。...在 MySQL 5.6 以及之后的版本中,MySQL 提出了一个 optimizer trace 的功能,这个功能可以让我们方便的查看优化器生成执行计划的整个过程。...而且支持在 session 中开启,不影响其它 session,对系统的影响降到了最低。...参考 《MySQL是怎样运行的》 MySQL · 最佳实践 · 性能分析的大杀器—Optimizer trace Chapter 8 Tracing the Optimizer

    1.2K10

    MySQL执行计划详解

    MySQL执行计划详解 在使用MySQL进行数据库开发和运维过程中,我们通常需要对执行计划进行优化。 在系统设计和架构中,数据库是必不可少的一环。而优化数据库查询效率也是非常重要的一环。...MySQL是一个流行的关系型数据库管理系统。本文将介绍MySQL中的执行计划,以及如何使用执行计划来优化查询效率。 什么是执行计划? 执行计划是MySQL查询优化器生成的一组指令,用于执行SQL语句。...在MySQL中,我们可以通过explain命令来查看执行计划。...; Extra:包含MySQL执行计划中的其他信息,例如是否使用了临时表、是否使用了文件排序等。...在执行计划中,我们可以看到MySQL是如何使用索引的。如果MySQL在执行计划中没有使用索引,那么就需要考虑为查询添加索引了。 2.

    1.4K10

    MySQL 执行计划详解

    ​ 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 ​...可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。 ​...官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html 1、执行计划中包含的信息 Column Meaning id The...in (select d.deptno from dept d where d.dname = 'SALES'); ​ 3、id相同和不同的,同时存在:相同的可以认为是一组,从上往下顺序执行,在所有组中,...--using filesort:说明mysql无法利用索引进行排序,只能利用排序算法进行排序,会消耗额外的位置 explain select * from emp order by sal; --using

    6K30

    执行计划--mysql详解(七)

    上篇文章说了,mysql优化器会从cpu和io成本来考虑查询的消耗,possible key来计算全表和索引的成本,选择成本最小的,子查询有物化和semi-join半连接的方式优化,物化会优先哈希索引memory...Mysql优化器-mysql详解(六) Mysql在计算成本之后生成执行计划,用explain来查看,会返回很多列。 Table:查询的表名称,查询几张表显示几行。...如果是子查询,也会显示两行,但id会是1和2,但凡是有例外,前面说过mysql优化器会优化子查询优化成半连接,这时候我们如何知道他是物化还是优化成半连接呢,可以通过id来判断,如果id一致,则和上面的连接查询一样...Possible key:就是我们前面说的mysql优化器在选择执行计划之前,会先把所有可能用到的索引全部计算一下成本。 Key:真实用到的索引。...还可以在执行完之后,执行show warnings会看到mysql优化器优化后的sql语句。

    1.1K30

    mysql索引及执行计划

    什么是索引 类似于一本书的目录,加速查询,会影响到锁的应用 种类 BTREE :在mysql应用99.9% innodb 做范围查询 rtree : mongodb FULLTEXT :对于大字段...BTREE查找算法演变 B-TREE 普通BTREE B+TREE 叶子节点双向指针 B++TREE 枝节点的双向指针 mysql中如何使用BTREE b树分三层 聚簇索引构建过程 leaf 叶子 存储数据行时就是有序的...的范围+指针 构建枝节点 可以优化以id列作为条件作为查询 group by , order by 都可以覆盖到 一个b树最少要有两层结构,根和叶子构成 b树 以数据页加载数据 每个数据页都是一个范围 mysql...btree 两类结构 clustered 聚簇(exent 区)索引 extent区 : 连续的64的数据页 默认1m IOT组织表 : 会按照聚簇索引组织方式,存储表中的数据行 聚簇索引是建表时的...一定要遵循最左原则 查询条件中一定要包含最左列条件 查看消耗代价 可以通过format=json进行查看 explain format=tree select * from world.city where

    2K31
    领券