MySQL执行计划详解

MySQL执行计划详解

MySQL执行计划(Execution Plan)是指MySQL在执行查询语句时生成的一份计划,通过该计划可以了解MySQL是如何执行查询,包括哪些表被查询、表之间的连接方式、数据的读取方式、使用的索引等,从而帮助我们对查询语句进行调优,提高查询性能。

执行计划的生成

MySQL在执行查询语句时,会经历以下几个步骤生成执行计划:

  1. 语法分析:MySQL会进行语法分析,验证查询语句的正确性。
  2. 查询优化器:MySQL会使用查询优化器优化查询语句,生成多种执行方案,并选择代价最小的一种方案作为执行计划。
  3. 执行计划生成器:MySQL会根据选择的执行方案,生成执行计划。

执行计划的查看

我们可以通过EXPLAIN命令查看执行计划,以下是该命令的基本格式:

EXPLAIN SELECT * FROM table1 WHERE id=1;

执行该命令后,MySQL会返回一张表格,其中包含了查询的详细信息,如下:

id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE table1 NULL ref PRIMARY PRIMARY 4 const 1 100 Using index
  • id:查询中每个SELECT子句的标识符,对于简单的SELECT查询,表示查询语句中的第N个表;
  • select_type:查询的类型,包括SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION、UNION RESULT等;
  • table:查询中所涉及的表;
  • partitions:匹配的分区数目(MySQL 5.1以上版本支持);
  • type:访问类型,包括ALL、index、range、ref、eq_ref、const、system、NULL、possible_keys等;
  • possible_keys:可能使用的索引;
  • key: 实际使用的索引;
  • key_len:所使用的索引的长度;
  • ref:索引的参考列;
  • rows:扫描表的行数;
  • filtered:表的过滤程度(0~100);
  • extra:附加信息,包括Using filesort、Using temporary、Using index等。

示例一

EXPLAIN SELECT * FROM orders WHERE order_date BETWEEN '2020/01/01' AND '2020/12/31';
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE orders NULL range order_date order_date 4 NULL 918 100.00 Using where

该查询使用了range访问类型,可能使用了order_date索引,并且真正使用了order_date索引,过滤了918行。

示例二

EXPLAIN SELECT a.*, b.* FROM orders a JOIN order_items b ON a.order_id = b.order_id WHERE a.order_date BETWEEN '2020/01/01' AND '2020/12/31' AND b.quantity > 10;
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE b NULL ref PRIMARY,order_id order_id 4 NULL 183 100 Using index condition; Using where; Using temporary
1 SIMPLE a NULL eq_ref PRIMARY,order_date PRIMARY 4 database.b.order_id 1 100 Using where

该查询使用了Using temporary来进行连接操作,其中b表使用了索引order_id进行过滤,因为包含了查询的WHERE条件中的order_id列。a表直接使用PRIMARY索引,因为建立了order_id和PRIMARY索引的关系;同时根据查询的WHERE条件,也使用了order_date索引。最后两个表进行了嵌套循环联接(eq_ref),使用了PRIMARY键和order_id连接;两个查询都使用了WHERE条件筛选。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL执行计划详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • MySQL中or、in、union与索引优化详析

    下面是关于MySQL中or、in、union与索引优化的详细攻略: 1. 索引的基本知识 在进入or、in、union的优化之前,我们先来了解一下索引的基本知识。在MySQL中,可以使用主键、唯一索引、普通索引等多种索引,来提升查询性能。索引的作用是对数据库表中的一列或多列进行排序的一种结构,类似于书籍的目录,可以提高数据的检索速度。 在使用索引时,需要注意…

    MySQL 2023年5月19日
    00
  • MySQL优化之Index Merge的使用

    MySQL优化之Index Merge的使用 在MySQL中,索引(Index)是提高查询效率的关键因素,优化索引是MySQL性能优化中的重点之一。在一些特定的场景下,我们可以使用Index Merge技术来进一步优化查询效率。本文将介绍Index Merge的概念、使用场景及示例说明等内容。 Index Merge概念 Index Merge是指MySQL…

    MySQL 2023年5月19日
    00
  • MySQL 1303错误的解决方法(navicat)

    下面是详细的MySQL 1303错误的解决方法(navicat)攻略: 1. 什么是MySQL 1303错误? MySQL 1303错误指的是当用户账户拥有的权限不足以访问或修改某个数据库中的表或数据时,导致的错误。该错误通常会在使用navicat等MySQL管理工具进行数据库操作时出现。 2. 解决MySQL 1303错误的方法 下面是解决MySQL 13…

    MySQL 2023年5月18日
    00
  • MySQL性能设置

    MySQL性能设置是提升MySQL数据库运行效率和性能的关键步骤之一。下面我将详细讲解MySQL性能设置的完整攻略,包括必要的设置和步骤。 1. 修改MySQL配置文件 MySQL配置文件(my.cnf或my.ini)中有很多可以影响MySQL性能的参数,你需要根据实际情况进行调整。 a. 修改缓存区大小 缓存区大小的设置对MySQL的性能有着直接的影响。在…

    MySQL 2023年5月19日
    00
  • MySQL中配置文件my.cnf因权限问题导致无法启动的解决方法

    当MySQL的配置文件my.cnf因为权限问题而无法启动时,我们可以采取以下步骤来解决问题。 确认权限问题 首先,我们需要确认my.cnf的权限确实是导致无法启动的原因。可以运行以下命令来检查文件权限: ls -l /etc/my.cnf 如果输出结果中的权限(例如-rw-r–r–)中包含的“w”字符比只有root用户可写(-rw-r–r–)的权限要…

    MySQL 2023年5月18日
    00
  • MySQL索引,备份和还原

    1.索引  1.索引是占硬盘空间 ,也是按页存放的 。 思考题:一个索引页,(数据页)  占用多少个字节  。SQL Server 8192个字节   2.索引:是一种有效组合数据的方式,为了快速查找指定记录   3.唯一索引: 主键索引:如果一列是主键列,那么该列自动会提升成主键索引。   4.索引分类    普通索引    唯一索引    主键索引   …

    MySQL 2023年4月12日
    00
  • mysql错误处理之ERROR 1665 (HY000)

    MySQL是一种广泛使用的关系型数据库管理系统,应用程序与MySQL进行通信时可能会产生各种各样的错误。本文将介绍MySQL错误处理之ERROR 1665 (HY000)的完整攻略,包括错误原因、处理方法及实例演示。 错误原因 当使用MySQL存储过程或函数时,您可能会遇到ERROR 1665 (HY000)错误。这个错误通常是在您尝试修改已经存储的过程或函…

    MySQL 2023年5月18日
    00
  • rails 连接mysql的问题解决

    下面是 “Rails 连接 MySQL 的问题解决”的完整攻略。 问题描述 在 Rails 应用中使用 MySQL 数据库时,可能会遇到连接 MySQL 数据库失败的问题,出现类似于以下错误信息: Access denied for user ‘root’@’localhost’ (using password: YES) 解决方案 确认 MySQL 服务正…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部