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安装提示配置信息已损坏请联系技术人员

    MySQL安装时出现“配置信息已损坏请联系技术人员”提示,这种情况通常是因为在先前的安装、卸载等过程中留下了一些残留配置文件导致的。解决问题的步骤如下: 1. 删除MySQL相关文件 首先需要删除MySQL的相关文件,包括安装目录、数据目录、缓存目录等。可以按照以下步骤进行: 打开控制面板,找到“程序和功能”或“应用和功能”选项 在列表中找到MySQL的安装…

    MySQL 2023年5月18日
    00
  • mysql数据记录

    mysql数据记录 准备工作 创建库、表 #创建数据库 create database mysql02; #使用数据库 use mysql02; #创建表 create table student(id int ,name varchar(10),age int); 查看student表结构 数据增删改操作 知识点 插入数据:insert into 表名(字…

    MySQL 2023年5月11日
    00
  • MySQL存储过程

    基本构造 delimiter $$ #定义终止符,可据习惯更换 CREATE PROCEDURE method_name() #创建方法 BEGIN #方法体开始 SELECT ‘code’; #方法体,写SQL语句 END #方法体终止 $$ #存储过程终止 基本语法 1.定义终止符 delimiter $$ #$$为自定义符,可据习惯更换 2.创建方法 …

    MySQL 2023年4月18日
    00
  • 通过node-mysql搭建Windows+Node.js+MySQL环境的教程

    以下是通过node-mysql搭建Windows+Node.js+MySQL环境的完整攻略: 准备工作 安装MySQL:首先从官网下载MySQL的安装文件,并根据提示进行安装。 安装Node.js:从Node.js官网下载对应平台的安装文件并安装。 创建示例项目 创建一个新的文件夹,并在此文件夹下创建一个package.json文件,用于记录项目中需要安装的…

    MySQL 2023年5月18日
    00
  • django1.11如何实时访问mysql数据库

    前几天,一直在研究django框架,发现它自身封装了很多有用的API,很有意思。比如,数据库操作基本的创表,查询,插值,更新,删除都有,很方便,再加上json库可以直接将数据json化,通过服务器传给前端并显示,连数据库也很快,响应迅速。 django 操作mysql数据库   取数据: 1 from blog.models import SfhdPredi…

    MySQL 2023年4月12日
    00
  • MySQL 5.6下table_open_cache参数优化合理配置详解

    MySQL的table_open_cache参数是控制MySQL数据库中打开表的缓存数量的参数。合理配置table_open_cache参数能够有效的提升MySQL数据库的性能。下面就是一个关于MySQL 5.6下table_open_cache参数优化合理配置的详细攻略。 什么是table_open_cache参数 table_open_cache参数是M…

    MySQL 2023年5月19日
    00
  • 解决MySQL数据库意外崩溃导致表数据文件损坏无法启动的问题

    MySQL 数据库因为各种原因可能会意外崩溃,这会导致表数据文件损坏,从而导致 MySQL 无法启动。下面是解决这个问题的一些攻略: 方法一:使用 MySQL 的恢复工具 MySQL 自带了一些恢复工具,可以通过下面的步骤来使用: 停止 MySQL 服务。 打开命令行窗口,进入 MySQL 安装目录的 bin 子目录中。 运行以下命令启动 MySQL 数据库…

    MySQL 2023年5月18日
    00
  • mysql 8.0.17 winx64(附加navicat)手动配置版安装教程图解

    MySQL 8.0.17 winx64(附加Navicat)手动配置版安装教程图解 下载MySQL和Navicat 首先,我们需要从官网下载MySQL 8.0.17的安装包。在下载时,需要注意选择对应的操作系统版本,即Windows 64位。 与此同时,我们还需要下载Navicat软件,这是一款GUI数据库管理工具,可以帮助我们更方便地管理MySQL数据库。…

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