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

如何查看mysql 执行计划

查看MySQL执行计划是数据库优化和性能调优的重要步骤。执行计划可以帮助你理解MySQL是如何执行SQL查询的,从而找出潜在的性能瓶颈。

基础概念

MySQL的执行计划是通过EXPLAIN关键字生成的。EXPLAIN关键字可以放在SQL查询语句之前,MySQL会返回一个表格,展示查询的执行计划。

类型

MySQL的执行计划主要包括以下几种类型:

  1. 全表扫描(ALL):MySQL会扫描整个表来找到匹配的行。
  2. 索引扫描(index):MySQL会使用索引来找到匹配的行。
  3. 范围扫描(range):MySQL会使用索引来查找一个范围内的值。
  4. 索引合并(index_merge):MySQL会合并多个索引的结果。
  5. 排序(sort):MySQL需要对结果进行排序。
  6. 临时表(temporary):MySQL需要创建临时表来存储中间结果。

应用场景

当你遇到以下情况时,可以查看执行计划:

  1. 查询性能较差,需要优化。
  2. 需要了解查询的执行过程。
  3. 需要验证索引的有效性。

示例代码

假设我们有一个简单的表users,结构如下:

代码语言:txt
复制
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    email VARCHAR(100)
);

我们可以使用EXPLAIN关键字来查看查询的执行计划:

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

参考链接

常见问题及解决方法

问题:执行计划显示全表扫描

原因:查询条件没有使用索引,或者索引没有被有效利用。

解决方法

  1. 确保查询条件使用了索引字段。
  2. 检查索引是否正确创建。
  3. 使用FORCE INDEXUSE INDEX来强制使用特定索引。
代码语言:txt
复制
EXPLAIN SELECT * FROM users USE INDEX (age) WHERE age > 30;

问题:执行计划显示排序

原因:查询结果需要排序,但没有使用索引。

解决方法

  1. 确保排序字段有索引。
  2. 使用覆盖索引(包含查询所有字段的索引)来避免排序。
代码语言:txt
复制
CREATE INDEX idx_age_name ON users(age, name);
EXPLAIN SELECT age, name FROM users WHERE age > 30;

通过查看和分析执行计划,你可以更好地理解MySQL的执行过程,并进行相应的优化。希望这些信息对你有所帮助!

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

相关·内容

  • 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服务器将在存储引擎检索行后再进行过滤 Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询...在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划

    1.9K30

    Mysql中explain命令查看执行计划

    前言 使用explain命令可以查看一条查询语句的执行计划,这篇文章记录一下查询计划的各个属性的值极其含义. ? 那么我们按照图中的顺序逐个字段的看一下....本文采用官网的数据库样本,下载地址:[MySQL官方数据库](https://dev.mysql.com/doc/index-other.html) id 一组数据,表示任务被执行的顺序,序号越大的任务越先执行...5 UNION 出现在union后的查询语句中 6 UNION RESULT 从UNION中获取结果集,例如上文的第三个例子 table 查询的数据表,当从衍生表中查数据时会显示 x 表示对应的执行计划...常见于主键或唯一索引扫描 const,system 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问 .NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引 possible_keys...将用where子句来过滤结果集 Using temporary 表示mysql在这个查询语句中使用了临时表.

    2K10

    如何使用 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 语句和索引设计的角度上进行改进。

    92120

    搞定面试官 - 如何查看 SQL 的执行计划

    ‍ 大家好,我是程序员啊粥,这段时间一直在分享 MySQL 索引系列的文章,我们学会了索引模型 MySQL InnoDB 索引模型,以及和具体的索引使用原则等内容,今天开始我们学习 SQL 的优化。...如何查询 SQL 执行频率 关于查询 SQL 执行频率,我们可以使用 show global status like 'Com___',(这后边是 7 个下划线),这条命令可以显示当前数据库中增删改查等各个语句的使用次数...得出时间消耗在那个环节之后,我们便可以使用具体的执行计划来进行针对性的优化,下边着重介绍一下关于 SQL 执行计划的使用。...要想查看是哪个函数,可在 EXPLAIN 语句之后紧跟一个 SHOW WARNING 语句。 rows MySQL 估算会扫描的行数,数值越小越好。...以上就是关于 explain 执行计划结果中的字段说明,具体的含义很多都是我从官网直接拿过来的,比较枯燥,当然也不需要你死记硬背,只要你在 SQL 优化过程中,有意识的使用 explain 分析它的执行计划

    97520

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

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

    82730

    MySQL执行计划

    这就可以通过explain关键字来查看。 2. 能干吗?...执行计划 4. 执行计划包含的信息: 如上图,执行计划查出来后包含如下信息: id:select 查询的序列号,包含一组数字,表示查询中执行select 子句或表的读取顺序。...包含以下内容: extra 含义 using filesort 说明MySQL会对数据使用一个外部的索引排序,而不是用表内的索引顺序进行读取,这种文件内排序是很费时的。...col2_col3,执行select col1 from t1 where col1 = 'a' order by col3,我们建的复合索引是三个列,而这条sql中只使用了两个,col2没了,看它的执行计划就会发现...using temporary MySQL在对查询结果排序时新建了一个临时表处理数据,常见于order by和group by,这种情况性能更差。

    1.1K20

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

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

    2.3K10

    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后查看执行计划

    1.4K10

    MySQL如何通过EXPLAIN分析SQL的执行计划

    MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。...PRIMARY 主查询,即外层的查询 UNION UNION中的第二个或者后面的查询语句 SUBQUERY 子查询中的第一个 table:输出结果集的表(表别名) type:表示MySQL...扫描行的数量 filtered: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比) Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息...MySQL5.6引入了Index Condition Pushdown(ICP)的特性,进一步优化了查询。Pushdown表示操作下放,某些情况下的条件过滤操作下放到存储引擎。...参考 《深入浅出MySQL》  《深入浅出MySQL》PDF文字版(全)PDF 下载  http://www.linuxidc.com/Linux/2016-05/130922.htm

    54710

    MySQL执行计划详解

    MySQL是一个流行的关系型数据库管理系统。本文将介绍MySQL中的执行计划,以及如何使用执行计划来优化查询效率。 什么是执行计划执行计划MySQL查询优化器生成的一组指令,用于执行SQL语句。...在MySQL中,我们可以通过explain命令来查看执行计划。...如何查看执行计划? 我们可以通过以下两种方式来查看执行计划: 1. 使用EXPLAIN关键字 EXPLAIN关键字可以让我们查看SQL查询的执行计划。...打开MySQL Workbench,选择需要查看执行计划的SQL语句,然后点击工具栏上的“Explain”,即可查看该SQL语句的执行计划如何优化查询效率?...在执行计划中,我们可以看到MySQL如何使用索引的。如果MySQL执行计划中没有使用索引,那么就需要考虑为查询添加索引了。 2.

    66810
    领券