首页 > 数据库 >mysql 执行计划

mysql 执行计划

时间:2024-04-23 22:23:44浏览次数:42  
标签:index 中间 UNION 查询 索引 计划 mysql 执行

https://www.modb.pro/db/1776807735064104960

一、mySql的执行顺序

mysql执行sql的顺序从 From 开始,以下是执行的顺序流程

1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1

2、JOIN table2 所以先是确定表,再确定关联条件

3、ON table1.column = table2.column 确定表的绑定条件 由Temp1产生中间表Temp2

4、WHERE 对中间表Temp2产生的结果进行过滤 产生中间表Temp3

5、GROUP BY 对中间表Temp3进行分组,产生中间表Temp4

6、HAVING 对分组后的记录进行聚合 产生中间表Temp5

7、SELECT 对中间表Temp5进行列筛选,产生中间表 Temp6

8、DISTINCT 对中间表 Temp6进行去重,产生中间表 Temp7

9、ORDER BY 对Temp7中的数据进行排序,产生中间表Temp8

10、LIMIT 对中间表Temp8进行分页,产生中间表Temp9

二、mySql的执行计划

1、什么是执行计划

执行计划就是sql的执行查询的顺序,以及如何使用索引查询,返回的结果集的行数

2、执行计划的内容

①.id sql执行计划的顺序 或子查询表的执行顺序

id一样,按照顺序执行;id越大,执行的优先级就越高(如子查询)

②.select_type 表示查询中每个select子句的类型

a.SIMPLE:查询中不包含子查询或者UNION

b.查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARY

c.在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY

d.在FROM列表中包含的子查询被标记为:DERIVED(衍生)

e.若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在 FROM子句的子查询中,外层SELECT将被标记为:DERIVED

f.从UNION表获取结果的SELECT被标记为:UNION RESULT

③.type

MySQL在表中找到所需行的方式,又称“访问类型”,常见类型如下:

由左至右,由最差到最好

ALL:全表扫描

index:index类型只遍历索引树

索引的存在形式是文件,按存储结构划分):FULLTEXT,HASH,BTREE,RTREE。

对应存储引擎支持如下:

range:索引范围扫描

对索引字段进行范围查询,使用in则是使用rang范围查询; 使用">" ,"

ref:非唯一性索引

类似 select count(1) from age = '20';

eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描

④.key

表示在执行语句用到的索引

查询中若使用了覆盖索引,则该索引仅出现在key列表中

覆盖索引:查询数据只需要通过索引就可以查询出,如55万条数据,使用索引,立刻可以查询出 2000条数据,同时Extra字段是Using index

⑤.Extra

Using index : 使用覆盖索引的时候就会出现

using index condition:查找使用了索引,但是需要回表查询数据

Using where :在查找使用索引的情况下,需要回表去查询所需的数据

using index & using where:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

Using temporary:需要使用临时表来存储结果集,常见于排序和分组查询

Using filesort:无法利用索引完成的排序操作称为“文件排序”;

很多场景都是索引是一个字段,order by 排序的字段与索引字段不一致,导致的Using fileSort;

此时可以给排序字段和where条件字段,添加为组合索引,同时保证索引查询的数据不超过总量的15%,避免fileSort

 

注:回表的含义是,先根据索引查询数据,然后在根据确定的数据id和查询条件再去查询具体的数据的过程

标签:index,中间,UNION,查询,索引,计划,mysql,执行
From: https://www.cnblogs.com/myxinyang/p/18153901

相关文章

  • 连接mysql -- host is not allowed to connect to this mysql server的解决
    今天通过navicat连接服务器的MySQL,报错:hostisnotallowedtoconnecttothismysqlserver去网上搜了一摞,有些方法不太管用,踩了点坑,在此记录下。版本:MYSQL8.0.36,CentOS7mysql-uroot-pusemysql;selectuser,hostfromuser;这时候可以看到:只允许localhost......
  • DRF之请求执行流程和APIView源码分析
    DRF之请求执行流程和APIView源码分析【一】路由入口fromdjango.contribimportadminfromdjango.urlsimportpathfrombookimportviewsurlpatterns=[path('admin/',admin.site.urls),#原来的路由写法#path('test_http/',views.TestHttpResponse),......
  • MYSQL使用binlog恢复数据
    要使用MySQL的二进制日志(binlog)恢复被删除的数据,你需要确保二进制日志功能已经开启,并且已经有足够的日志记录来恢复数据。以下是恢复数据的基本步骤和示例代码:1、确认二进制日志功能已经开启:查看my.cnf(或my.ini)配置文件,确保log_bin变量设置为非空值,或者使用以下SQL命令SHOWVAR......
  • python3下安装mysqlclient各种报错 raise OSError mysql_config not found
    linux下载地址:https://files.pythonhosted.org/packages/a5/e1/e5f2b231c05dc51d9d87fa5066f90d1405345c54b14b0b11a1c859020f21/mysqlclient-2.0.1.tar.gz#sha256=fb2f75aea14722390d2d8ddf384ad99da708c707a96656210a7be8af20a2c5e5在服务器执行pipinstallmysqlclient-2.0.......
  • linux下Mysql安装
    1、安装查看有没有安装过:yumlistinstalledmysql*rpm-qa|grepmysql*查看有没有安装包:yumlistmysql*安装mysql客户端:yuminstallmysql安装mysql服务器端:yuminstallmysql-server 在centOs7中未找到yuminstallmysql-devel2、启动  &&  停止数据......
  • centos7安装mysql指定版本
    下载并安装mysql源仓库mysql下载地址:https://dev.mysql.com/downloads/安装方式选择第一个社区版的Yum仓库选centos版本,用的centos7​下载以后得到mysql80-community-release-el7-11.noarch.rpm文件安装yum仓库rpm-Uvhmysql80-community-release-el7-11.noarch.rpm备......
  • MySQL社区版8.0.30 精简版
    优点:占用空间小,初始总空间大小不足50MB无需安装,按需启动,双击启动MySQL.bat,即可运行。关闭即停止。方便移植,直接压缩并拷贝转移即可。适合开发者,学生使用。目录结构:运行状态:注意:所在目录不能包含中文名称。下载地址:链接:https://pan.baidu.com/s/1GKDnANouJRUgX4h......
  • MySQL企业版8.3.0 精简版
    精简版优点:占用空间小,初始总空间大小不足300MB无需安装,按需启动,双击启动MySQL.bat,即可运行。关闭即停止。3.方便移植,直接压缩并拷贝转移即可。适合开发者,学生使用。目录结构:运行状态:链接:https://pan.baidu.com/s/1boXtj-Qa50GGuLbBHhAJQg提取码:zgio说明:精简版完全......
  • MySQL的在sync_binlog!=1造成1236报错【转】
    前言本文总结了主从复制的原理及日常运维的坑1.主从复制简介MySQL复制是指从一个MySQL主服务器(master)将数据拷贝到另一台或多台MySQL从服务器(slaves)的过程,将主数据库的DDL和DML操作通过二进制日志传到从库服务器上,然后在从服务器上对这些日志重新执行,从而使得主......
  • Mysql 密码报错 You must reset your password ... 和 Your password does N
    如果MySQL数据库用户的密码设置过于简单,数据库在用户登录后会提示重置密码,并且不接受简单的密码。提示需要重置密码:ERROR1820(HY000):YoumustresetyourpasswordusingALTERUSERstatementbeforeexecutingthisstatement.Mysql数据库版本:5.7.1操作系统:CentOS7这......