首页 > 数据库 >sql优化之explain

sql优化之explain

时间:2022-12-24 16:01:02浏览次数:32  
标签:UNION explain 查询 索引 role sql 优化 id

1. explain的介绍

explain可以显示mysql是如何执行sql语句的,以便我们知道sql语句的性能瓶颈在哪,帮助我们进行相关的性能优化。

2. explain的使用方法

explain的使用方法比较简单,就是直接用explain+sql语句即可,如下所示:
image

3. explain各字段说明

  • 3.1 id
    select查询的序号,是一组数据,表示select语句的执行顺序,数字的值越大表示越先执行,如果数字值相等,则是按照从上到下的顺序进行执行。如:
    image
    先执行的就是:select role_id from role_menu where menu_id = 1,然后在执行select * from role where id =
    而id的值相同的,如下:
    image
    则这个的执行顺序则是从上往下,先执行的是select * from role where id in ,然后在执行select role_id from role_menu where menu_id = 1
  • 3.2 select_type
    主要用来表示查询的类型,其值有SIMPLE、PRIMARY、DERIVED、UNION、DEPENDENT UNION、UNION RESULT、SUBQUERY、DEPENDENT SUBQUERY等,各个值的含义为:
含义
SIMPLE 简单查询,也就是不使用子查询、嵌套查询、关联查询的查询
PRIMARY 通常是复杂查询的最外层
DERIVED 一个表中查询另一个满足条件的集合,一般用于将子查询放到临时表中,会展示这个类型
UNION 多个查询的并集查询,一般是在union后的查询语句显示这个类型
DEPENDENT UNION 依赖联合查询,一般是在依赖的子查询中使用union进行并集查询
UNION RESULT 联合结果查询,通常是联合查询的最终结果,带有联合查询的情况下,都有这种查询,表示把两个或者多个查询结果合并起来
SUBQUERY 子查询,通常是子查询中的记录数确认为不超过2条的情况下,为子查询,如果子查询为一个集合,则演变为依赖子查询。
DEPENDENT SUBQUERY 依赖子查询,通常是子查询中的记录数超过了两条

各个类型的sql样例为:
- SIMPLE
image
- PRIMARY
image
- DERIVED
image
- UNION
image
- DEPENDENT UNION
image
- UNION RESULT
image
- SUBQUERY
image
- DEPENDENT SUBQUERY
image

  • 3.3 table
    这个指的当前执行的sql语句查询的表
  • 3.4 partitions
    代表分区表中的命中情况,非分区表,该项为NULL,一般情况下我们的查询语句的执行计划的partitions的列的值都是NULL
  • 3.5 type
    主要是用来显示查询使用了那种类型,其类型主要有以下几种,且其性能从大到小为:system > const > eq_ref > ref > range > index > all
    一般查询的时候要求性能要达到range级别,最好能到ref级别。
    各个类型的含义如下:
类型 含义
system 表只有一行记录,是const类型的特列
const 表示通过索引一次就找到了
eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
ref 非唯一性索引扫描,返回匹配某个单独值的所有行,与唯一性索引的区别就是唯一性索引查询的数据只有一条,而非唯一性索引查询的数据会有多条
range 只检索给定范围的行,使用一个索引来选择行
index 遍历全部索引树
all 遍历全表

各个类型的样例为:
- system
其中t表只有一条数据
image
- const
其中role表的id为主键,有两条数据
image
- eq_ref
其中role表id为主键,role_menu表role_id为唯一索引
image
- ref
其中role_menu表的role_id为普通索引
image
- range
其中admin表的name上有唯一索引
image
- index
其中role_menu表的role_id上有普通索引
image
- all
image

  • 3.6 posible_keys
    可能会用到的表中的索引,一个或多个,不一定实际用到
  • 3.7 key
    实际用到的表中索引
  • 3.8 key_len
    表示索引中使用的字节数
  • 3.9 ref
    显示索引的哪一列被使用了,如果是个常数的话显示为const
  • 3.10 rows
    根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,也就是说,用的越少越好
  • 3.11 filtered
    表示通过查询条件获取的最终记录行数占通过type字段指明的搜索方式搜索出来的记录行数的百分比。这个字段的值越大越好,这个值越大说其所使用的索引的效果越好。
  • 3.12 Extra
    显示扩展的一些其他信息:
含义
Using filesort mysql会对数据使用一个外部的索引排序
Using temporary 使用了用临时表保存中间结果
Using index 表示在查询时使用了覆盖索引
Using where 表示使用了where过滤
Using join buffer 表示在查询时使用了连接缓存
impossible where 表示where子句的值总是false
distinct 再找到第一个值之后停止找同样值

4. 总结

这里主要介绍了mysql的explain执行计划,学会使用explain之后能够对我们进行sql优化的时候起到很大的帮助。

标签:UNION,explain,查询,索引,role,sql,优化,id
From: https://www.cnblogs.com/mcj123/p/17001669.html

相关文章

  • 关于 MySQL 嵌套子查询中,无法关联主表字段问题的折中解决方法
    今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。其实,问题的场景,非常简单:就是需要查询出上图的数据,红框是......
  • 关于 MySQL 嵌套子查询中,无法关联主表字段问题的折中解决方法
    今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。其实,问题的场景,非常简单:就是需要查询出上图的数据,红框是......
  • 以小博大外小内大,Db数据库SQL优化之小数据驱动大数据
    SQL优化中,有一条放之四海而皆准的既定方针,那就是:永远以小数据驱动大数据。其本质其实就是以小的数据样本作为驱动查询能够优化查询效率,在SQL中,涉及到不同表数据的连接、转......
  • SQL Server—— 增量恢复
    1.准备工作1.1.数据库名称xxx项目1.2.操作系统WinServer2008-R21.3.数据库类型MS-SqlServer2008R2(RTM)-10.50.1600.1(X64)1.4.恢复介质文件数据库备份模式:......
  • 关于 MySQL 嵌套子查询中,无法关联主表字段问题的折中解决方法
    今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。其实,问题的场景,非常简单:就是需要查询出上图的数据,红框是......
  • IDEA在4K屏下的缩放优化
    1.修改为150%之后的缩放效果  2.打开idea的虚拟机配置文件  3.添加-Dide.ui.scale=1.51.5为缩放比例,可自行调整。   ......
  • MySQL
    第1章今日内容1.MySQLMySQL:是用于管理文件的一个软件服务端软件socket服务端本地文件操作解析指令(SQL语句)客户端软件(各种各样)socket客户端发......
  • 解决MySQL5.5MySQLInstanceConfig最后一步setting报错
    问题描述在安装过MySQL(或已卸载)的电脑中重新安装MySQL5.5, 在安装最后一项中Processing configuration中最后一项配置失败:问题解决:首先关于卸载:安装时候若使......
  • Windows7优化,优化达到30多项,速度大幅提升,
    Windows7优化,优化达到30多项,速度大幅提升,点此下载Windows7优化(下载地址放在文章底部)解压开后导入Windows7优化.reg后重启。或者新建文本文档复制粘贴以下代码保存为.reg......
  • 深入理解 MySQL 索引底层原理
      一步一步推导出Mysql索引的底层数据结构。Mysql作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是Mysql数据的存储形式以......