返回顶部
首页 > 资讯 > 数据库 >mysql执行计划指的是什么
  • 533
分享到

mysql执行计划指的是什么

mysql 2022-11-30 23:11:32 533人浏览 薄情痞子
摘要

这篇文章主要讲解了“Mysql执行计划指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql执行计划指的是什么”吧!

这篇文章主要讲解了“Mysql执行计划指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql执行计划指的是什么”吧!

在mysql中,执行计划是数据库提供给用户的一套对sql语句进行解析、分析、优化功能的工具。执行计划的作用有:1、展示表的读取顺序;2、数据读取操作的类型;3、展示哪些索引是可以使用的;4、展示哪些索引是实际上使用的;5、展示表之间的引用关系;6、展示每张表被查询的行数。

数据库查询的时候,我们通常会使用sql语句去查询自己所需要的数据。但是,关于sql在数据库中是如何执行的,它有没有使用索引,具体使用了哪些索引,查找了哪些字段和表,他们的顺序是怎样的,分别用时多少等等信息我们不得而知,那么有没有什么方法可以看到这些信息,mysql给我们提供了一套工具——执行计划。

一、什么是执行计划

执行计划是数据库提供给我们的一套对sql语句进行解析、分析、优化功能的工具,他具有以下的作用:

  • 展示表的读取顺序;

  • 数据读取操作的类型;

  • 哪些索引是可以使用的;

  • 哪些索引是实际上使用的;

  • 表之间的引用关系;

  • 每张表被查询的行数。

注意:执行计划只是数据库针对sql给出最佳的优化参考方案,并不一定是最优解,即不要过度相信执行计划

二、如何使用执行计划

使用执行计划很简单,在要执行的sql前面加上关键词explain即可。

三、执行计划信息

mysql执行计划指的是什么

从图中可以看出,sql执行计划主要包含以下信息:id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra。

3.1、id

select查询序列号,id相同,执行顺序由上至下;id不同,id值越大优先级越高,越先被执行;

3.2、select_type

select_type:表示select语句的类型,可以有以下取值;

  • SIMPLE:表示简单查询,其中不包含连接查询和⼦查询;

  • PRIMARY: 表示主查询,或者是最外⾯的查询语句;

  • UNION:表示连接查询的第2个或后⾯的查询语句;

  • DEPENDENT UNION:UNION中的第⼆个或后⾯的SELECT语句,取决于外⾯的查询;

  • UNION RESULT: 连接查询的结果;

  • SUBQUERY:⼦查询中的第1个SELECT语句;

  • DEPENDENT SUBQUERY:⼦查询中的第1个SELECT语句,取决于外⾯的查询;

  • DERIVED:SELECT(FROM ⼦句的⼦查询)。

3.3、table

table:表示查询的表名,可以有以下几种情况:

  • 显示表名,如果起了别名,则显示别名;

  • <derivenN>:表示查询的条件是一个子查询;

  • <union1,2>:表示表1和表2使用union。

3.4、partitions

partitions:匹配的分区。

3.5、type

type:这⼀列表示表关联类型或访问类型,即数据库决定如何查找表中的⾏,查找数据⾏记录的⼤概范围。依次从最优到最差分别为:system > const > eq_ref > ref > range > index > all

  • system:表中只有一行记录,相当于系统表,这是const类型的特列,平时不会出现,可以忽略不计;

  • const:通过索引一次命中,匹配一行数据,所以很快,常⽤于PRIMARY KEY或者UNIQUE索引的查询,可理解为const是最优化的;

  • eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用语主键或唯一索引扫描,这可能是在 const 之外最好的联接类型了;

  • ref:非唯一性索引扫描,返回匹配某个单独值的所有行,用于=、<或>操作符带索引的列;

  • range:只检索给定范围的行,使用一个索引来选择行,一般用于between、<、>、in等查询,这种范围查询要比index要好,因为他只需要扫描索引的一个点,结束于另外一个点;

  • index:需要遍历索引树;

  • all:即全表扫描,意味着数据库需要从头到尾去查找所需要的⾏。通常情况下这需要增加索引来进⾏优化了。

注意:在进行sql优化的时候至少要优化到range,推荐优化到ref,最好是const。

3.6、possible_keys

possible_keys:这⼀列显示查询可能使⽤哪些索引来查找。explain 时可能出现 possible_keys 有列,⽽ key 显示 NULL 的情况,这种情况是因为表中数据不多,数据库认为索引对此查询帮助不⼤,选择了全表查询。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查 where ⼦句看是否可以创造⼀个适当的索引来提⾼查询性能,然后⽤ explain 查看效果。

3.7、key

key:显示数据库实际决定使⽤的键(索引)。如果没有选择索引,key的值是NULL。可以强制使⽤索引或者忽略索引。

3.8、key_len

key_len:这⼀列显示了数据库在索引⾥使⽤的字节数,通过这个值可以算出具体使⽤了索引中的哪些列,数值计算如下:

字符串类型
char(n):n字节长度
varchar(n):2字节存储字符串长度,如果是utf-8,则长度 3n + 2

数值类型
tinyint:1字节
smallint:2字节
int:4字节
bigint:8字节  

时间类型 
date:3字节
timestamp:4字节
datetime:8字节

如果字段允许为 NULL,需要1字节记录是否为 NULL

注意:索引最⼤⻓度是768字节,当字符串过⻓时,数据库会做⼀个类似左前缀索引的处理,将前半部分的字符提取出来做索引。

3.9、ref

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

3.10、rows

rows:这⼀列是数据库估计要读取并扫描的⾏数,注意这个不是结果集⾥的⾏数,因此这个值越小越好。

3.11、filtered

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

3.12、Extra

extra:这一列显示的是额外的信息,即不包含在其他列的信息,具体值如下:

  • 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筛选条件是索引的前导列,意味着⽤到了索引,但是部分字段未被索引覆盖,必须通过“回表”来实现,不是纯粹地⽤到了索引,也不是完全没⽤到索引,即使用了索引但需要回表操作,应该避免回表操作。

感谢各位的阅读,以上就是“mysql执行计划指的是什么”的内容了,经过本文的学习后,相信大家对mysql执行计划指的是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: mysql执行计划指的是什么

本文链接: https://lsjlt.com/news/173772.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql执行计划指的是什么
    这篇文章主要讲解了“mysql执行计划指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql执行计划指的是什么”吧! ...
    99+
    2022-11-30
    mysql
  • MySQL的执行计划是什么
    这篇文章给大家介绍MySQL的执行计划是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、前言当我们工作到了一定的年限之后,一些应该掌握的知识点,我们是必须需要去了解的,比如今天面...
    99+
    2024-04-02
  • SQL Server的执行计划是什么
    本文小编为大家详细介绍“SQL Server的执行计划是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server的执行计划是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-07-06
  • 什么是SQLServer中的执行计划
    SQL Server中的执行计划是指数据库管理系统在执行SQL查询时生成的用于优化和执行查询的计划。执行计划是一个由数据库引擎生成的...
    99+
    2024-04-02
  • MySQL执行计划中的各个参数及含义指的是什么
    这期内容当中小编将会给大家带来有关MySQL执行计划中的各个参数及含义指的是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。查看执行计划可以使用explain + SQ...
    99+
    2024-04-02
  • oracle执行计划的方法是什么
    本篇内容主要讲解“oracle执行计划的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle执行计划的方法是什么”吧!先从最开头一直往右看,直到...
    99+
    2024-04-02
  • MySQL 5.7Explain执行计划
    小编给大家分享一下MySQL 5.7Explain执行计划,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!目录1. 介绍2. Ex...
    99+
    2024-04-02
  • mysql执行计划怎么看
    这篇文章主要介绍mysql执行计划怎么看,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql执行计划怎么看可以使用 explain + sql语句查看执行计划,代码如下...
    99+
    2024-04-02
  • mysql执行计划怎么查
    在MySQL中,可以通过使用`EXPLAIN`关键字来查看查询语句的执行计划。执行以下步骤来查看MySQL执行计划:1. 在MySQ...
    99+
    2023-10-12
    mysql
  • MySQL中的执行计划explain
    一、用法及定义:   explain为sql的执行计划、在sql前面加上explain关键字即可 如:explain select * from tbl_emp; 名词解释:   id:【操作表的顺序】     1.i...
    99+
    2015-01-30
    MySQL中的执行计划explain
  • mysql的执行计划解释
    关于MySQL的执行计划,做个笔记,可以做为优化的依据,尽量将第四列 type优化到ref,至少要保证range方式,能用覆盖索引的要使用覆盖索引,然后possible_keys显示null不代表不使用...
    99+
    2024-04-02
  • 详解 MySQL 执行计划
    EXPLAIN语句提供有关MySQL如何执行语句的信息。EXPLAIN与SELECT,DELETE,INSERT,REPLACE和UPDATE语句一起使用。 EXPLAIN为SELECT语句中使用的每个表返回...
    99+
    2022-05-10
    MySQL 执行计划
  • MySQL执行计划详解
    一、mysql执行计划介绍 在MySQL中,执行计划的实现是基于JOIN和QEP_TAB这两个对象。其中JOIN类表示一个查询语句块的优化和执行,每个select查询语句(即Query_block对象)在处理的时候,都会...
    99+
    2024-04-02
  • mysql如何执行计划
    小编给大家分享一下mysql如何执行计划,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!      ...
    99+
    2024-04-02
  • MySQL执行计划里面的key_len有什么用
    这篇文章主要介绍了MySQL执行计划里面的key_len有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。   以前看My...
    99+
    2024-04-02
  • Mysql怎么查看执行计划
    这篇文章主要介绍“Mysql怎么查看执行计划”,在日常操作中,相信很多人在Mysql怎么查看执行计划问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql怎么查看执行计划”...
    99+
    2024-04-02
  • 怎么查看mysql执行计划
    要查看MySQL执行计划,可以使用EXPLAIN关键字。在执行SQL语句之前,将其放在EXPLAIN关键字之前,然后执行该语句。例如...
    99+
    2024-04-09
    mysql
  • MySQL的执行计划详解(Explain)
    1、MySQL执行计划的定义 在 MySQL 中可以通过 explain 关键字模拟优化器执行 SQL语句,从而知道 MySQL 是如何处理 SQL 语句的。 2、MySQL整个查询的过程 • 客户端向 MySQL 服务器发送一条查询请求 ...
    99+
    2023-08-19
    mysql 数据库 java
  • 数据库执行计划原则是什么
    本篇内容介绍了“数据库执行计划原则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • MySQL执行计划中的各个参数及含义是什么
    本篇文章给大家分享的是有关MySQL执行计划中的各个参数及含义是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作