explain是什么?explain优缺点及如何使用explain优化SQL

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: explain是什么?explain优缺点及如何使用explain优化SQL


Explain

定义

查看当前查询语句索引是否生效,是否有使用到索引

作用

表的读取顺序

查询类型

哪些索引可以使用

哪些索引实际被使用到

简单介绍一下每个字段对应代表什么意思

Explain 每个字段定义

Id

表示查询中执行selet子句或操作表的顺序

select_type

查询的类型,主要是用于区别普通查询、联合查询、子查询等复杂查询

具体有一下几种类型

  1. SIMPLE 简单的select 查询,查询总不包含子查询或UNION
  2. PRIMARY 查询中包含任何复杂的子部分,最外层查询则被标记为(主查询)
  3. SUBQUERY 在select 或where列表中包含了子查询
  4. DERIVED 在from列表汇总包含的子查询被标记为DERIVED(衍生)
  5. MySQL会递归执行这些子查询,把结果放在临时表(衍生的临时表)
  6. UNION 若第二个select出现在UNION之后,则被标记为UNION
  7. 若UNION包含在form子句的子查询中,外层select将被标记为DERIVED
  8. UNIONRESULT 从UNION表获取结果的SELECT

table

显示这行数据是关于当前这张表的

type

显示访问类型

结果值从最好到最坏依次是:

system>const>eq_ref>ref>reange>index>ALL

一般来说,保证查询至少达到range级别,最好能达到ref

possible_keys

显示可能应用到这张表中的索引,一个或多个显示可能应用到这张表中的索引,一个或多个;

查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用(理论上应该用到的索引数量);

key

实际使用的索引。如果为NULL,则没有使用索引;

查询中若使用了覆盖索引,则该索引仅出现在key列表中(实际用到的索引数量);

key_len

表示索引中使用的字节数,值越大查询数来的结果越精确

ref

显示索引的哪一列 被使用了,如果可能得话,是一个常数,哪些列或常量被用于查找索引列上的值

rows

根据表统计信息及索引选用情况,大致估算找到所需的记录锁需要读取的行数

Extra

Mysql支持两种排序方式

文件排序(using filesort)或者扫描有序索引排序(using index)

应用场景

场景一

explain select * from student

根据上面的各个字段定义,可以看到这条SQL执行后,select_type显示为是一条简单SQL,table显示为查询的是student表

type 扫描类型是全局扫描,possible_keys 应该用到索引,显示为null,key实际用到索引显示为null,从这两个字段可以看

出,要么索引失效了,要么没有索引,ref也显示到了没有用到索引,Extra 排序类型也没有

查了一下这个表是有索引的,那为什么没有用上呢?

原因是:我在我的博文中(链接: MySQL 索引)提到过索引失效的几种原因,其中就有一种检索数据时使用select *,会导致索引失效,下面我们来验证一下不用select * 是否可以

下面我们来验证一下不用select * ,用索引列是否可以

看到了吧,type是index (system>const>eq_ref>ref>reange>index>ALL),虽然说没有达到ref或reange,但是最起码不是全表扫描ALL,key实际用到索引了,排序类型是 Using index 索引排序,这就是我们一个基本的SQL调优排查,为其排查索引是否失效

场景二

explain select StudentName from student where StudentNo > 'S001' and StudentNo < 'S005' order by StudentNo,StudentName

虽然说查询结果中显示使用了索引,但是在Extra排序中是Using filesort(文件排序),这样对于我们检索来说,也会出现性能损耗的情况,我在我的博文中(链接: MySQL 索引)提到过索引失效的几种原因,其中就有一种 检索数据时使用范围条件进行检索可能会导致索引失效

场景三

explain select a.StudentNo,a.StudentName,b.name from student a left join class b on a.Id = b.student_Id

这种情况我在我的博文中(链接: MySQL 索引)提到过

当在连接多表查询时,如何正确的使用索引

左连接查询将索引建到右边;(LEFT JOIN 条件用于确定如何从右表搜索行,左边一定都有)

右连接查询将索引建到左边;

在这里就向别名为b表中添加索引

--向class表中name字段添加索引
create index name_index on class(name)

这时在看索引就用上了

以上就是Explain的三种使用情况,当然这些都是比较简单的索引问题排查,复杂的也与上面差不多,只要是掌握Explain每个字段的定义,SQL调优以及Explain问题排查就会轻松很多

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第18天】SQL Server 存储过程具有提高性能、增强安全性、代码复用和易于维护等优点。它可以减少编译时间和网络传输开销,通过权限控制和参数验证提升安全性,支持代码共享和复用,并且便于维护和版本管理。然而,存储过程也存在可移植性差、开发和调试复杂、版本管理问题、性能调优困难和依赖数据库服务器等缺点。使用时需根据具体需求权衡利弊。
|
7天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
15天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
60 10
|
14天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
28天前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
29天前
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
|
1月前
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第17天】SQL Server 存储过程是预编译的 SQL 语句集,存于数据库中,可重复调用。它能提高性能、增强安全性和可维护性,但也有可移植性差、开发调试复杂及可能影响数据库性能等缺点。使用时需权衡利弊。
|
1月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
SQL 搜索推荐 关系型数据库
要精通SQL优化?那就学一学explain吧!
要SQL优化,首先要知道哪些地方需要优化。
要精通SQL优化?那就学一学explain吧!
|
SQL 关系型数据库 MySQL
sql优化——explain
sql优化——explain http://www.bieryun.com/3431.html 利用explain可以得到sql的执行计划,是查询性能优化不可缺少的一部分。 explain得到的列明解释: id: 用来标识select语句的,id越大越先执行。
1542 0

热门文章

最新文章