首页 > 数据库 >mysql Explan命令 如何分析语句

mysql Explan命令 如何分析语句

时间:2024-04-16 15:00:53浏览次数:32  
标签:Explan 语句 table1 EXPLAIN MySQL 查询 索引 mysql

  MySQL 中的 EXPLAIN 命令是一种用于分析查询语句执行计划的强大工具,它可以帮助您了解 MySQL 优化器如何处理 SQL 查询,揭示查询执行过程中的关键细节,如表的读取顺序、数据读取操作的操作类型、所使用的索引等。通过 EXPLAIN 分析查询语句,您可以找出潜在的性能瓶颈,进行针对性的优化以提高查询效率 。以下是使用 EXPLAIN 分析查询语句的步骤和关键字段解读:

步骤:

  1、准备查询语句:确定您想要分析的 SQL 查询语句,确保它是完整的且无语法错误。
  2、添加 EXPLAIN 关键字:在查询语句前加上关键字 EXPLAIN。例如,原查询语句为:

  

   SELECT * FROM table1 JOIN table2 ON table1.id = table2.table1_id WHERE table1.column = 'some_value';
   

    修改为:

   EXPLAIN SELECT * FROM table1 JOIN table2 ON table1.id = table2.table1_id WHERE table1.column = 'some_value';
   

  3、执行分析:在 MySQL 客户端中执行修改后的查询。MySQL 将返回一个结果集,显示查询的执行计划。
关键字段解读: 

   EXPLAIN 结果集中包含多个列,每个列代表查询执行过程中的一个重要信息。以下是一些主要字段及其含义:

  • id:查询中执行计划的序列号。相同的数字表示执行顺序是并行的。如果一个 id 的值较小且没有依赖于其他 id,那么它将优先执行。NULL 表示这是一个子查询的结果。
  • select_type:查询的类型,如 SIMPLE(简单查询,没有子查询或UNION)、PRIMARY(最外层的SELECT)、SUBQUERY(子查询)、DEPENDENT SUBQUERY(依赖外部查询结果的子查询)等。
  • table:查询涉及到的表名。如果查询使用了别名,这里显示的是别名。
  • type:访问类型,反映了表数据的读取方式。从最优到最差依次为:
    • system:表只有一行数据(通常是系统表),常量查询
    • const / eq_ref:基于唯一索引或主键的等值查询,返回一行数据。
    • ref:使用非唯一索引进行等值查询或范围查询。
    • range:使用索引来检索给定范围的行。
    • index:全表扫描索引,不读取数据行。
    • ALL:全表扫描,最坏的情况。
  • possible_keys:查询可能使用的索引列表。如果为空,表示没有可用的索引。
  • key:实际使用的索引。如果没有选择索引,则为 NULL。
  • key_len:使用的索引长度,可以帮助判断索引是否完全覆盖查询或部分覆盖查询。
  • ref:如果是使用索引关联查询,该列显示与索引相对应的查询条件值。
  • rows:MySQL 估算为了找到所需的行而必须扫描的行数。数值越小越好。
  • filtered(MySQL 5.7+):MySQL 估算按表条件过滤后,返回结果集的行占总扫描行的比例(百分比)。数值越接近100%越好。
  • Extra:提供额外的信息,如 Using index(覆盖索引,无需访问表数据)、Using where(使用了WHERE子句但未使用索引)、Using temporary(使用了临时表)、Using filesort(需要进行额外的排序操作)等。

  分析与优化提示:

  • 关注 type 字段:优先级最高的优化目标是将全表扫描(ALL)转换为索引扫描(如 range、ref、eq_ref 等)。
  • 检查 key 字段:确保查询实际使用了预期的索引。如果没有使用索引或使用了错误的索引,可能需要调整查询条件、优化索引结构或使用 FORCE INDEX 强制指定索引。
  • 注意 rows 和 filtered 字段:这两个字段有助于评估查询的效率。如果估算的行数很大,可能需要重新考虑查询策略或优化相关索引。
  • 审视 Extra 字段:避免出现 Using temporary 和 Using filesort,它们通常意味着性能瓶颈。如果出现 Using index,则表明使用了覆盖索引,查询效率较高。

通过综合分析上述字段,您可以识别查询中的性能瓶颈,采取如添加或调整索引、优化查询条件、改写查询结构等措施来提升查询性能。在进行优化后,再次使用 EXPLAIN 分析查询,确认改进效果。有时,可能需要反复迭代这个过程,直至达到满意的查询性能。

   

标签:Explan,语句,table1,EXPLAIN,MySQL,查询,索引,mysql
From: https://www.cnblogs.com/bwcx1375/p/18138179

相关文章

  • Mysql:canal 客户端 client java包依赖 v1.1.5+
     Cao!<dependencies><dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.7</version></dependency><dependency>......
  • CentOS 7.9 python 虚拟环境安装mysqlclient失败
    目录环境懵懂安装报错原因解决完结撒花......
  • MySQL之磁盘I/O过高排查
    导读有个MySQL服务器的磁盘I/O总有过高报警,怎么回事?有哪些原因MySQL服务器最近总是报告磁盘I/O非常高,出现这种问题,一般来说,磁盘I/O很高无非是下面几个原因引起:磁盘子系统设备性能差,或采用ext2/ext3之类文件系统,或采用cfq之类的ioscheduler,所以IOPS提上不去;SQL效率不高,......
  • mysql5.7 dump GTID一致性的问题
    利用mysqldump导出数据时提示warning,ApartialdumpfromaserverthathasGTIDsubt@ubt-All-Series:~$mysqldump-uroot-psdxdb>sdxdb.sqlWarning:ApartialdumpfromaserverthathasGTIDswillbydefaultincludetheGTIDsofalltransactions,eventhoseth......
  • 数据库的基本使用-mysql
    https://blog.csdn.net/weixin_50964512/article/details/1246452121.showdatabases;//显示当前已有的数据库2.createdatabasetest2;//创建新的数据库3.usetest1;//使用test1数据库,接下来的操作基于该数据库4.exit;//退出sql//数据表增删改查select*......
  • 美团二面:如何保证Redis与Mysql双写一致性?连续两个面试问到了!
    引言Redis作为一款高效的内存数据存储系统,凭借其优异的读写性能和丰富的数据结构支持,被广泛应用于缓存层以提升整个系统的响应速度和吞吐量。尤其是在与关系型数据库(如MySQL、PostgreSQL等)结合使用时,通过将热点数据存储在Redis中,可以在很大程度上缓解数据库的压力,提高整体系统的......
  • MySQL千万数据,怎么快速查询?
    前言面试官:来说说,一千万的数据,你是怎么查询的?me:直接分页查询,使用limit分页。面试官:有实操过吗?me:肯定有呀此刻献上一首《凉凉》也许有些人没遇过上千万数据量的表,也不清楚查询上千万数据量的时候会发生什么。今天就来带大家实操一下,这次是基于MySQL5.7.26做测试准备数据......
  • 开机后mysql服务未启动问题解决
    问题:mysql的启动类型设置了自动,但是电脑开机后还是需要手动启动。 解决方法:一、Win+R快捷键弹出运行框 二、输入regedit后回车 三、地址栏内输入计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control后回车 四、找到Control入径后,新建一个名称为ServicesPipe......
  • 【MySQL】二进制安装MySQL
    【MySQL】二进制安装MySQL一、基于Ubuntu二进制安装MySQL8.0(5.7+适用)1、创建用户[root@Node-Ubuntu1804-20:~]#groupaddmysql[root@Node-Ubuntu1804-20:~]#useradd-r-gmysql-s/usr/sbin/nologinmysql2、创建目录[root@Node-Ubuntu1804-20:~]#mkdir/data/mysql......
  • 2、Oracle Select语句
    最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。视频链接:【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用如果有侵权,请联系删除,谢谢。1、SQL基础介绍SQL的全程是:structurequerylanguage。SQL语句分为以......