广告
返回顶部
首页 > 资讯 > 数据库 >MYSQL 性能分析器 EXPLAIN 用法实例分析
  • 297
分享到

MYSQL 性能分析器 EXPLAIN 用法实例分析

MYSQL性能分析器EXPLAIN 2022-05-27 13:05:05 297人浏览 泡泡鱼
摘要

本文实例讲述了Mysql 性能分析器 EXPLaiN 用法。分享给大家供大家参考,具体如下: 使用方法: EXPLAIN SELECT * FROM user; 环境和数据准备 -- 查看 mysq

本文实例讲述了Mysql 性能分析器 EXPLaiN 用法。分享给大家供大家参考,具体如下:

使用方法:


EXPLAIN SELECT * FROM user;

环境和数据准备


-- 查看 mysql 版本
SELECT VERSioN();
 
-- Mysql 提供什么存储引擎
SHOW ENGINES;
 
-- 查看默认存储引擎
SHOW VARIABLES LIKE '%storage_engine%';

 输出结果:

 id:输出的是整数,用来标识整个 SQL 的执行顺序。id 如果相同,从上往下依次执行id不同;id 值越大,执行优先级越高,越先被执行;如果行引用其他行的并集结果,则该值可以为NULL

select_type:[查询类型]

SIMPLE:简单的 SELECT 查询,没有 UNION 或者子查询,包括单表查询或者多表 JOIN 查询

PRIMARY: 最外层的 select 查询,常见于子查询或 UNION 查询 ,最外层的查询被标识为 PRIMARY

UNION:UNION 操作的第二个或之后的 SELECT,不依赖于外部查询的结果集(外部查询指的就是 PRIMARY 对应的 SELECT)

DEPENDENT UNION:UNION 操作的第二个或之后的 SELECT,依赖于外部查询的结果集

UNION RESULT:UNION 的结果(如果是 UNION ALL 则无此结果)

SUBQUERY:子查询中的第一个 SELECT 查询,不依赖于外部查询的结果集

DEPENDENT SUBQUERY:子查询中的第一个select查询,依赖于外部查询的结

DERIVED:派生表(临时表),常见于 FROM 子句中有子查询的情况

注意:MySQL5.7 中对 Derived table 做了一个新特性,该特性允许将符合条件的 Derived table 中的子表与父查询的表合并进行直接JOIN,从而简化简化了执行计划,同时也提高了执行效率;默认情况下,MySQL5.7 中这个特性是开启的,所以默认情况下,上面的 SQL 的执行计划应该是这样的

MATERIALIZED:被物化的子查询,MySQL5.6 引入的一种新的 select_type,主要是优化 FROM 或 IN 子句中的子查询,更多详情请查看:Optimizing Subqueries with Materialization

UNCACHEABLE SUBQUERY:对于外层的主表,子查询不可被缓存,每次都需要计算

UNCACHEABLE UNION:类似于 UNCACHEABLE SUBQUERY,只是出现在 UNION 操作中

SIMPLLE、PRIMARY、SUBQUERY、DERIVED 这 4 个在实际工作中碰到的会比较多,看得懂这 4 个就行了,至于其他的,碰到了再去查资料就好了

table:显示了对应行正在访问哪个表(有别名就显示别名),还会有 <union2,3> 、 <subquery2> 、 <derived2> (这里的 2,3、2、2 指的是 id 列的值)类似的值

partitions:查询进行匹配的分区,对于非分区表,该值为NULL。大多数情况下用不到分区,所以这一列我们无需关注

type:

关联类型或者访问类型,它指明了 MySQL 决定如何查找表中符合条件的行,这是我们判断查询是否高效的重要依据,完整介绍请看:explain-join-types

system:该表只有一行(=系统表),是 const 类型的特例

const:确定只有一行匹配的时候,mysql 优化器会在查询前读取它并且只读取一次,速度非常快。用于 primary key 或 unique 索引中有常亮值比较的情形

eq_ref:对于每个来自于前面的表的行,从该表最多只返回一条符合条件的记录。当连接使用的索引是 PRIMARY KEY 或 UNIQUE NOT NULL 索引时使用,非常高效

ref:索引访问,也称索引查找,它返回所有匹配某个单个值的行。此类型通常出现在多表的 JOIN 查询, 针对于非 UNIQUE 或非 PRIMARY KEY, 或者是使用了最左前缀规则索引的查询,换句话说,如果 JOIN 不能基于关键字选择单个行的话,则使用ref

fulltext:当使用全文索引时会用到,这种索引一般用不到,会用专门的搜索服务(solr、elasticsearch等)来替代

ref_or_null:类似ref,但是添加了可以专门搜索 NULL 的行

这个是有前提条件的,前提为 weapon 列有索引,且 weapon 列存在  NULL 

index_merge:该访问类型使用了索引合并优化方法

这个同样也是有条件的, id 列和 weapon 列都有单列索引。如果出现 index_merge,并且这类 SQL 后期使用较频繁,可以考虑把单列索引换为组合索引,这样效率更高

unique_subquery:类似于两表连接中被驱动表的 eq_ref 访问方式,unique_subquery 是针对在一些包含 IN 子查询的查询语句中,如果查询优化器决定将 IN 子查询转换为 EXISTS 子查询,而且子查询可以使用到主键或者唯一索引进行等值匹配时,则会使用 unique_subquery

index_subquery:index_subquery 与 unique_subquery类似,只不过访问子查询中的表时使用的是普通的索引

range:使用索引来检索给定范围的行,当使用 =、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,则会使用 rang,前提是必须基于索引,也就是 id 上必须有索引

index:当我们可以使用索引覆盖,但需要扫描全部的索引记录时,则会使用 index;进行统计时非常常见

ALL:我们熟悉的全表扫描

possible_keys:展示在这个 SQL 中,可能用到的索引有哪些,但不一定在查询时使用。若为空则表示没有可以使用的索引,此时可以通过检查 WHERE 语句看是否可以引用某些列或者新建索引来提高性能

key:展示这个 SQL 实际使用的索引,如果没有选择索引,则此列为null,要想强制 MySQL 使用或忽视 possible_keys 列中的索引,在查询中使用 FORCE INDEX、USE INDEX 或者I GNORE INDEX

key_len:展示 MySQL 决定使用的键长度(字节数)。如果 key 是 NULL,则长度为 NULL。在不损失精确性的情况下,长度越短越好

ref:展示的是与索引列作等值匹配的东东是个啥,比如只是一个常数或者是某个列。它显示的列的名字(或const),此列多数时候为 Null

rows:展示的是 mysql 解析器认为执行此 SQL 时预计需要扫描的行数。此数值为一个预估值,不是具体值,通常比实际值小

filtered:展示的是返回结果的行数所占需要读到的行(rows 的值)的比例,当然是越小越好啦

extra:

表示不在其他列但也很重要的额外信息。取值有很多,我们挑一些比较常见的过一下

using index:表示 SQL 使用了使用覆盖索引,而不用回表去查询数据,性能非常不错

using where:表示存储引擎搜到记录后进行了后过滤(POST-FILTER),如果查询未能使用索引,using where 的作用只是提醒我们 mysql 要用 where 条件过滤结果集

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

using filesort:表示 mysql 无法利用索引直接完成排序(排序的字段不是索引字段),此时会用到缓冲空间(内存或者磁盘)来进行排序;一般出现该值,则表示 SQL 要进行优化了,它对 CPU 的消耗是比较大的

impossible where:查询语句的WHERE子句永远为 FALSE 时将会提示该额外信息

当然还有其他的,不常见,等碰到了大家再去查吧!!!

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

您可能感兴趣的文档:

--结束END--

本文标题: MYSQL 性能分析器 EXPLAIN 用法实例分析

本文链接: https://www.lsjlt.com/news/9573.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MYSQL 性能分析器 EXPLAIN 用法实例分析
    本文实例讲述了MYSQL 性能分析器 EXPLAIN 用法。分享给大家供大家参考,具体如下: 使用方法: EXPLAIN SELECT * FROM user; 环境和数据准备 -- 查看 MySQ...
    99+
    2022-05-27
    MYSQL 性能分析器 EXPLAIN
  • MySQL性能分析(Explain)
    更多知识,请移步我的小破站:http://hellofriend.top 1. 概述 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈...
    99+
    2021-11-05
    MySQL性能分析(Explain)
  • 如何使用MYSQL性能分析器EXPLAIN
    这篇文章主要讲解了如何使用MYSQL性能分析器EXPLAIN,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。使用方法:EXPLAIN SELECT * FROM user...
    99+
    2022-10-18
  • MySQL性能优化神器Explain的基本使用分析
    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单,...
    99+
    2022-10-18
  • Mysql索引结合explain分析示例
    目录简介1.索引分类聚簇索引为什么选择B+树explain简介 Mysql 在我们项目中使用是非常广的,当我们数据量大的时候,就需要考虑建立索引了,我感觉这也是一种以空间换时间的方式...
    99+
    2022-11-13
  • Mysql explain用法与结果深入分析
    前言 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上...
    99+
    2022-05-26
    explain mysql mysql索引explain explain的使用
  • MySQL中EXPLAIN解释命令及用法的示例分析
    这篇文章将为大家详细讲解有关MySQL中EXPLAIN解释命令及用法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1,情景描述:同事教我在mysql中用expl...
    99+
    2022-10-18
  • MySQL用法中对explain的用法和结果分析
    本篇文章和大家了解一下MySQL用法中对explain的用法和结果分析。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1. EXPLAIN简介使用EXPLAIN关键字可以模拟优化器执行SQ...
    99+
    2022-10-18
  • Mysql通过explain分析定位数据库性能问题
    目录引言explain基础exlpain分析实战总结引言 数据库性能优化是每个后端程序猿必备的基础技能之一,而mysql中的explain堪称Mysql的性能优化分析神器,我们可以通过它来分析SQL语句的对应的执行计划在...
    99+
    2023-01-13
    Mysql的explain使用 Mysql的explain
  • mysql视图功能与用法实例分析
    本文实例讲述了mysql视图功能与用法。分享给大家供大家参考,具体如下: 通俗的讲,视图就是一条SELECT语句执行后返回的结果集。 //单表视图 CREATE [ALGORITHM]={U...
    99+
    2022-10-18
  • Mysql Explain命令的使用与分析
    mysql explain命令用于显示mysql如何使用索引来处理select语句以及连接表。通过该命令可以分析出查询语句或是表结构的性能瓶颈,从而写出性能更好的SQL语句,通过 expalin 命令我们可...
    99+
    2022-10-18
  • MySQL SQL性能分析之慢查询日志、explain使用详解
    目录SQL执行频率慢查询日志profileexplainSQL执行频率 mysql 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前...
    99+
    2023-04-14
    MySQL 慢查询日志 MySQL explain使用
  • MySQL SQL性能分析之慢查询日志、explain使用详解
    目录SQL执行频率慢查询日志profileexplainSQL执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务...
    99+
    2023-05-16
    MySQL 慢查询日志 MySQL explain使用
  • mysql中引擎、Explain和权限的示例分析
    小编给大家分享一下mysql中引擎、Explain和权限的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!引擎简介Inno...
    99+
    2022-10-18
  • MySQL通过showstatus查看、explain分析优化数据库性能
    1.概述 在应用系统开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,...
    99+
    2022-11-13
  • MySQL性能优化的案例分析
    这篇文章主要介绍MySQL性能优化的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言MySQL索引底层数据结构与算法MySQL性能优化原理-前篇实践(1)--MySQL性能...
    99+
    2022-10-18
  • MySQL性能参数的示例分析
    这篇文章主要介绍MySQL性能参数的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过...
    99+
    2022-10-18
  • MySQL分库分表实例分析
    这篇“MySQL分库分表实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL分库分表实例分析”文章吧。一、为什么...
    99+
    2023-06-30
  • mysql之explain使用详解(分析索引)
    explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了,如: ex...
    99+
    2022-10-18
  • MySQL SQL性能分析之慢查询日志、explain使用的方法是什么
    本篇内容介绍了“MySQL SQL性能分析之慢查询日志、explain使用的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况...
    99+
    2023-04-19
    mysql sql explain
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作