MySql中怎么使用解释查询SQL的执行计划

  介绍

这篇文章主要介绍MySql中怎么使用解释查询SQL的执行计划,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

解释命令是查看查询优化器如何决定执行查询的主要方法。

这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的。

<强> 1,什么是MySql执行计划

,,,,,,要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。

,,,,,,,MySQL本身的功能架构分为三个部分,分别是应用层,逻辑层,物理层,不只是MySQL,其他大多数数据库产品都是按这种架构来进行划分的。

应用层,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的。

逻辑层,主要负责查询处理,事务管理等其他数据库功能处理,以查询为例只,,,,,,,

,,,,,,,首先接收到查询SQL之后,数据库会立即分配一个线程对其进行处理,第一步查询处理器会对SQL查询进行优化,优化后会生成执行计划,然后交由计划执行器来执行。

,,,,,,,计划执行器需要访问更底层的事务管理器,存储管理器来操作数据,他们各自的分工各有不同,最终通过调用物理层的文件获取到查询结构信息,将最终结果响应给应用层。

物理层,实际物理磁盘上存储的文件,主要有分文数据文件,日志文件只,,

,,,,,,,通过上面的描述,生成执行计划是执行一条SQL必不可少的步骤,一条SQL性能的好坏,可以通过查看执行计划很直观的看出来,执行计划提供了各种查询类型与级别,方面我们进行查看以及为作为性能分析的依据只

<强> 2,如何分析执行计划

,,,,MySQL为我们提供了解释关键字来直观的查看一条SQL的执行计划。

,,,,解释显示了MySQL如何使用索引来处理选择语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。

,,,,,下面我们使用解释做一个查询,如下:

mysql>, explain  select  *,得到支付;   + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +   | |,id  select_type  |, table  |, partitions  |, type  |, possible_keys  |, key  |, key_len  |, ref  |, rows  |, filtered  | Extra  |   + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +   |,1,|,SIMPLE , |, payment  |, NULL , |, ALL  |, NULL ,, |, NULL  |, NULL  |, NULL  |, 16086, |, 100.00, |, NULL  |   + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +   1,row 集,拷贝,1,warning  (0.01, sec)

,,,,,,,查询结构中有12列,理解每一列的含义,对理解执行计划至关重要,下面用一个表格的形式进行说明。

列名说明idSELECT识别符,这是选择的查询序列号.select_type

选择类型,可以为以下任何一种:

<李>

简单:简单选择(不使用联盟或子查询)

<李>

主:最外面的选择

<李>

工会:工会中的第二个或后面的选择语句

<李>

依赖工会:工会中的第二个或后面的选择语句,取决于外面的查询

<李>

联盟结果:联盟的结果

<李>

子查询:子查询中的第一个选择

<李>

相关子查询:子查询中的第一个选择、取决于外面的查询

<李>

派生:导出表的选择(从子句的子查询)

表输出的行所引用的表分区如果查询是基于分区表的话,显示查询将访问的分区.type

联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序:

<李>

系统:表仅有一行(=系统表)。这是const联接类型的一个特例。

<李>

const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数.const表很快,因为它们只读取一次!null

MySql中怎么使用解释查询SQL的执行计划