iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql执行计划知识点有哪些
  • 830
分享到

mysql执行计划知识点有哪些

2024-04-02 19:04:59 830人浏览 泡泡鱼
摘要

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

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

The DESCRIBE and EXPLaiN statements are synonyms, used either to obtain infORMation about table structure or query execution plans.

DESCRIBE和EXPLAIN语句是同义词,用于获得表结构信息和sql语句的执行计划。

The DESCRIBE and EXPLAIN statements are synonyms. In practice, the DESCRIBE keyWord is more often used to obtain information about table structure, whereas EXPLAIN is used to obtain a query execution plan (that is, an explanation of how MySQL would execute a query). The following discussion uses the DESCRIBE and EXPLAIN keywords in accordance with those uses, but the MySQL parser treats them as completely synonymous.

DESCRIBE和EXPLAIN语句是同义词,实际上在平时使用过程中DESCRIBE多用于获取表结构的信息,然后EXPLAIN多用于获取SQL语句的执行计划。MySQL解析器对这两个语句是完全作为同义词对待的。

mysql> desc mysql.plugin;

+-------+--------------+------+-----+---------+-------+

| Field | Type         | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| name  | varchar(64)  | NO   | PRI |         |       |

| dl    | varchar(128) | NO   |     |         |       |

+-------+--------------+------+-----+---------+-------+

2 rows in set (0.00 sec)


mysql> explain mysql.plugin;

+-------+--------------+------+-----+---------+-------+

| Field | Type         | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| name  | varchar(64)  | NO   | PRI |         |       |

| dl    | varchar(128) | NO   |     |         |       |

+-------+--------------+------+-----+---------+-------+

2 rows in set (0.00 sec)


mysql> desc select * from mysql.plugin;

+----+-------------+--------+--------+---------------+------+---------+------+------+---------------------+

| id | select_type | table  | type   | possible_keys | key  | key_len | ref  | rows | Extra               |

+----+-------------+--------+--------+---------------+------+---------+------+------+---------------------+

|  1 | SIMPLE      | plugin | system | NULL          | NULL | NULL    | NULL |    0 | const row not found |

+----+-------------+--------+--------+---------------+------+---------+------+------+---------------------+

1 row in set (0.07 sec)


mysql> explain select * from mysql.plugin;

+----+-------------+--------+--------+---------------+------+---------+------+------+---------------------+

| id | select_type | table  | type   | possible_keys | key  | key_len | ref  | rows | Extra               |

+----+-------------+--------+--------+---------------+------+---------+------+------+---------------------+

|  1 | SIMPLE      | plugin | system | NULL          | NULL | NULL    | NULL |    0 | const row not found |

+----+-------------+--------+--------+---------------+------+---------+------+------+---------------------+

1 row in set (0.00 sec)


  • EXPLAIN和DESCRIBE的语法(DESC是DESCRIBE 的缩写)

{EXPLAIN | DESCRIBE | DESC}

    tbl_name [col_name | wild]

{EXPLAIN | DESCRIBE | DESC}

    [explain_type]

    {explainable_stmt | FOR CONNECTION connection_id}

explain_type: {

    EXTENDED

  | PARTITIONS

  | FORMAT = format_name

}

format_name: {

    TRADITIONAL

  | JSON

}

explainable_stmt: {

    SELECT statement

  | DELETE statement

  | INSERT statement

  | REPLACE statement

  | UPDATE statement

}

1)EXPLAIN和DESCRIBE同样可以查看表字段

{EXPLAIN | DESCRIBE | DESC}

    tbl_name [col_name | wild]

mysql> desc mysql.plugin name;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| name  | varchar(64) | NO   | PRI |         |       |

+-------+-------------+------+-----+---------+-------+

1 row in set (0.00 sec)

2)解析类型

{EXPLAIN | DESCRIBE | DESC}

    [explain_type]

    {explainable_stmt | FOR CONNECTION connection_id}

explain_type: {

    EXTENDED

  | PARTITIONS

  | FORMAT = format_name

}


EXPLAIN  EXTENDED:获取执行计划额外的信息

EXPLAIN PARTITIONS :是用于涉及到分区表的语句


EXPLAIN FORMAT

mysql> EXPLAIN FORMAT=jsON  select * from mysql.user where user='root';

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| EXPLAIN                                                                                                                                                                                                                            |

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| {

  "query_block": {

    "select_id": 1,

    "table": {

      "table_name": "user",

      "access_type": "ALL",

      "rows": 6,

      "filtered": 100,

      "attached_condition": "(`mysql`.`user`.`User` = 'root')"

    }

  }

} |

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set, 1 warning (0.01 sec)


mysql> EXPLAIN FORMAT=TRADITIONAL  select * from mysql.user where user='root';

+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |

+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

|  1 | SIMPLE      | user  | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |

+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

1 row in set (0.00 sec)

如果不添加FORMAT默认为TRADITIONAL


3)explainable_stmt

EXPLAIN 支持SELECT DELETE  INSERT REPLACE  UPDATE 语句



  •  EXPLAIN Output Columns(执行计划输出的列)


Column JSON Name Meaning
id select_id The SELECT identifier
select_type None The SELECT type
table table_name The table for the output row
partitions partitions The matching partitions
type access_type The join type
possible_keys possible_keys The possible indexes to choose
key key The index actually chosen
key_len key_length The length of the chosen key
ref ref The columns compared to the index
rows rows Estimate of rows to be examined
filtered(5.7) filtered Percentage of rows filtered by table condition
Extra None Additional information

id (JSON name: select_id)

执行计划各个子任务的序号,这些序号是有序的。如果数据行指向其他行的联合结果,该值可以为空,此时会显示去说明指向的数据行。

select_type (JSON name: none)

执行计划各个子任务的类型,下面是所有的类型

select_type Value JSON Name Meaning
SIMPLE

None

简单查询,不使用联合查询和子查询

PRIMARY None 最外层的查询
UNION None 联合查询中第二个或者后面的语句
DEPENDENT UNION

dependent (true)

联合查询中第二个或者后面的语句,取决于外面的查询

UNION RESULT union_result 联合查询的结果
SUBQUERY None 子查询中的第一个查询
DEPENDENT SUBQUERY dependent (true)

子查询中的第一个查询,取决于外面的查询

DERIVED None FROM后面的子查询
MATERIALIZED materialized_from_subquery Materialized subquery
UNCACHEABLE SUBQUERY cacheable (false) A subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query
UNCACHEABLE UNION cacheable (false) The second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY)

table (JSON name: table_name)

输出行的表的名称,也可以是下面的值

- : The row refers to the union of the rows with id values of M and N.

- : The row refers to the derived table result for the row with an id value of N. A derived table may result, for example, from a subquery in the FROM clause.

- : The row refers to the result of a materialized subquery for the row with an id value of N. See Section 9.2.2.2, “Optimizing Subqueries with Materialization”.

partitions (JSON name: partitions)

查询匹配到的分区名称,如果值为NULL说明没有涉及分区表。

type (JSON name: access_type)

联合join的类型,下面是各个类型:

system                     连接系统表,表中只有一行数据

const                        读常量,且最多只会有一条数据,一般是使用主键或者唯一索引匹配常量(速度非常快)

eq_ref                       最多只会有一条匹配结果,一般是通过主键或者唯一键索引来访问或者连接(除system、const最快的连接)

ref                             Join 语句中被驱动表索引引用查询

fulltext                       使用fulltext索引

ref_or_null                  和ref唯一区别是,多了null值查询

index_merge               查询中同时使用两个(或更多)索引,然后对索引结果进行merge 之后再读取表数据

unique_subquery         子查询中的返回结果字段组合是主键或者唯一约束

index_subquery          子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或者唯一索引

range                         索引范围扫描

index                         全索引扫描(1覆盖索引的全表查询的情况,2全表查询,通过先查索引再查数据的情况)

ALL                              全表扫描

possible_keys (JSON name: possible_keys)

possible_keys列指出MySQL能使用哪个索引在该表中找到行。注意,该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。

如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询

key (JSON name: key)

key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

key_len (JSON name: key_length)

key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。

使用的索引的长度。在不损失精确性的情况下,长度越短越好

ref (JSON name: ref)

ref列显示使用哪个列或常数与key一起从表中选择行。

如果该列的值为func,说明存在额外信息,可以使用SHOW WARNINGS去查看。

rows (JSON name: rows)

MySQL预估计的查询需要执行的行数。

对于InnoDB表,该值不一定准确。

filtered (JSON name: filtered)(5.7)

预估的获取的数据量在表中的百分比

Extra (JSON name: none)

这列包含了MYSQL如何处理语句的解决方案的额外信息。

Child of 'table' pushed join@1  

const row not found 

Deleting all rows

Distinct 

FirstMatch(tbl_name)  

Full scan on NULL key 

Impossible HAVING  

Impossible WHERE  

Impossible WHERE noticed after reading const tables 

LooseScan(m..n)

No matching min/max row

no matching row in const table

No matching rows after partition pruning

No tables used

Not exists

Plan isn't ready yet

Range checked for each record

Scanned N databases 

Select tables optimized away 

Skip_open_table, Open_frm_only, Open_full_table

Start temporary, End temporary

unique row not found

Using filesort    当我们的Query 中包含ORDER BY 操作,而且无法利用索引完成排序操作的时候,MySQL Query Optimizer 不得不选择相应的排序算法来实现

Using index     所需要的数据只需要在Index 即可全部获得而不需要再到表中取数据

Using index condition

Using index for group-by   数据访问和Using index 一样,所需数据只需要读取索引即可,而当Query 中使用了GROUPBY 或者DISTINCT 子句的时候,如果分组字段也在索引中,Extra 中的信息就会是Using index forgroup-by

Using join buffer (Block Nested Loop), Using join buffer (Batched Key Access)

Using MRR

Using sort_union(...), Using union(...), Using intersect(...) 

Using temporary     当MySQL 在某些操作中必须使用临时表的时候,在Extra 信息中就会出现Using temporary 。主要常见于GROUP BY 和ORDER BY 等操作中

Using where     如果我们不是读取表的所有数据,或者不是仅仅通过索引就可以获取所有需要的数据,则会出现Using where 信息

Using where with pushed condition 这是一个仅仅在NDBCluster 存储引擎中才会出现的信息,而且还需要通过打开ConditionPushdown 优化功能才可能会被使用。控制参数为engine_condition_pushdown

Zero limit

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

您可能感兴趣的文档:

--结束END--

本文标题: mysql执行计划知识点有哪些

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql执行计划知识点有哪些
    这篇文章主要讲解了“mysql执行计划知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql执行计划知识点有哪些”吧! The DESCRI...
    99+
    2024-04-02
  • mysql知识点有哪些
    本篇内容主要讲解“mysql知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql知识点有哪些”吧! 1、同步方式 binlog和pos同步、...
    99+
    2024-04-02
  • MySQL的知识点有哪些
    本篇内容主要讲解“MySQL的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的知识点有哪些”吧! 1.在Ce...
    99+
    2024-04-02
  • MySQL 5.7Explain执行计划
    小编给大家分享一下MySQL 5.7Explain执行计划,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!目录1. 介绍2. Ex...
    99+
    2024-04-02
  • MySQL索引知识点有哪些
    本篇内容主要讲解“MySQL索引知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL索引知识点有哪些”吧! Mysq...
    99+
    2024-04-02
  • MySQL全面知识点有哪些
    这篇文章主要讲解了“MySQL全面知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL全面知识点有哪些”吧!Windows服务连接与断开服务...
    99+
    2024-04-02
  • Mysql基础知识点有哪些
    这篇文章主要介绍Mysql基础知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据库的特点?数据结构化 ,数据之间具有联系,面向整个系统;数据的共享性高,冗余度低,易扩充;...
    99+
    2024-04-02
  • MYSQL进阶知识点有哪些
    这篇文章主要介绍MYSQL进阶知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文章目录1 前言1.1 数据库架构1.2 监控信息2 影响数据库的因素2.6.1 什么是事务2...
    99+
    2024-04-02
  • MySQL Online DDL知识点有哪些
    这篇文章主要介绍“MySQL Online DDL知识点有哪些”,在日常操作中,相信很多人在MySQL Online DDL知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • MySQL锁的知识点有哪些
    小编给大家分享一下MySQL锁的知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!锁的概念①、锁,在现实生活中是为我们想...
    99+
    2024-04-02
  • MySQL相关知识点有哪些
    这篇文章主要介绍了MySQL相关知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1、数据库架构1.1...
    99+
    2024-04-02
  • Oracle里的常见执行计划有哪些
    小编给大家分享一下Oracle里的常见执行计划有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!与表访问相关的执行计划Orac...
    99+
    2024-04-02
  • 云计算基础知识点有哪些
    本篇内容主要讲解“云计算基础知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“云计算基础知识点有哪些”吧!数据的可用性以及完整性是用户使用云服务的根本。云计算因按需服务、资源池共享、按服...
    99+
    2023-06-27
  • mysql如何执行计划
    小编给大家分享一下mysql如何执行计划,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!      ...
    99+
    2024-04-02
  • MYSQL中基础知识点有哪些
    这篇文章给大家分享的是有关MYSQL中基础知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数据库概述Database:数据库,用于永久的存储数据的软件,海量存储、高效存...
    99+
    2024-04-02
  • MySQL的索引知识点有哪些
    本文小编为大家详细介绍“MySQL的索引知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL的索引知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、索引介绍索引(index)是帮助M...
    99+
    2023-06-29
  • mysql关于variable知识点有哪些
    这篇文章主要讲解了“mysql关于variable知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql关于variable知识点有哪些”吧!...
    99+
    2024-04-02
  • oracle查询执行计划的方法有哪些
    这篇文章主要介绍“oracle查询执行计划的方法有哪些”,在日常操作中,相信很多人在oracle查询执行计划的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”orac...
    99+
    2024-04-02
  • mysql binlog相关知识点有哪些
    本篇内容主要讲解“mysql binlog相关知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql binlog相关知识点有哪些”吧! ...
    99+
    2024-04-02
  • MySQL分区表有哪些知识点
    本篇内容介绍了“MySQL分区表有哪些知识点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL分区表...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作