iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中EXPLAIN语句如何使用
  • 735
分享到

MySQL中EXPLAIN语句如何使用

2023-06-14 07:06:20 735人浏览 八月长安
摘要

这篇文章主要介绍了MySQL中EXPLaiN语句如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在Mysql优化的环节上,我们首先需要知道的就是我们当前的这句sql语句

这篇文章主要介绍了MySQL中EXPLaiN语句如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Mysql优化的环节上,我们首先需要知道的就是我们当前的这句sql语句在实际的数据库中究竟是怎么执行的,才能谈要如何优化它。而在mysql中,就给我们提供了模拟语句执行的一个非常好用的关键字:EXPLAIN。EXPLAIN可以用来查看SQL语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。因此今天我们就来讲一讲这个关键字的一些基础的用法与应用。

一、使用方法

EXPLAIN的使用方法非常简单:

mysql> EXPLAIN SELECT * FROM user;

简单来说,就是在原有的SQL语句前面加上EXPLAIN关键字,或者说是在EXPLAIN关键字后跟这你要检查的SQL语句。

二、输出结果

EXPLAIN语句的输出结果才是我们想要的数据,也是我们分析的重点。
我们先来看看上面的语句所给到的对应的结果的形式:

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| 1 | SIMPLE  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

EXPLAIN语句给到我们的数据总共有10列,接下来我们看一下一些在性能优化上有比较重要作用的数据列所代表的意思。

1.id

这个是select查询的序列号。

2.select_type

当我们的SQL语句是非select语句的时候(即delete,update...),这个字段的值就是对应的操作类型(delete,update...)。

mysql> EXPLAIN INSERT INTO user VAULES(2,'ahong','31');

此时的输出select_type就是我们对应的INSERT:

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| 1 | INSERT  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | NULL |  NULL | NULL |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

而当SQL语句时select语句的时候,他就是对应的一些详细的select的类型,可以有如下几种:

SIMPLE:简单SELECT(不使用UNION或子查询等)PRIMARY:最外面的SELECTUNION:UNION中的第二个或后面的SELECT语句DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询UNION RESULT:UNION的结果。SUBQUERY:子查询中的第一个SELECTDEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询DERIVED:导出表的SELECT(FROM子句的子查询)

下面就是一个最简单的SIMPLE查询的例子:

mysql> EXPLAIN SELECT * FROM user;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| 1 | SIMPLE  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

3.table

显示这一步操作所访问的数据是关于哪一张表的。

4.partitions

显示表所使用的分区,如果要统计十年公司订单的金额,可以把数据分为十个区,每一年代表一个区。这样可以大大的提高查询效率。

5.type

这是最重要的一列。显示了连接使用了哪种类别,有无使用索引。是分析查询性能的关键。
结果性能从优到差分别有以下的情况:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

而这几种情况所代表的意义如下:

  • system、const: 可以将查询的变量转为常量. 如id=1; id为 主键或唯一键.

  • eq_ref: 访问索引,返回某单一行的数据.(通常在联接时出现,查询使用的索引为主键或惟一键)

  • ref: 访问索引,返回某个值的数据.(可以返回多行) 通常使用=时发生

  • range: 这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西,并且该字段上建有索引时发生的情况(注:不一定好于index)

  • index: 以索引的顺序进行全表扫描,优点是不用排序,缺点是还要全表扫描

  • ALL: 全表扫描,应该尽量避免_

一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。

6.possible_key

显示查询语句有可能会使用到的索引列。取值可能为一个,多个或者null。

7.key

key列显示的是该查询语句实际使用的索引列。如为null,则表示没有使用索引。
展示一下possible_key和key的实际效果:
下面是一个在age列上建立索引的数据表,我们进行以下的查询

mysql> explain select * from user where age = 1;

会得到以下的结果:

+----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+| 1 | SIMPLE  | user | NULL  | ref | age   | age | 5  | const | 1 | 100.00 | NULL |+----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+

8.key_len

显示的是当前的查询语句所使用的索引的长度。在不损失精确性的情况下,长度越短越好.

9.ref

引用到的上一个表的列。

10.rows

根据表的情况和查询语句的情况,MySQL会估算出返回最终结果所必须检查的行的数量。该列的值越大查询效率越差。

11.filtered

一个百分比的值,和rows 列的值一起使用,可以估计出查询执行计划(QEP)中的前一个表的结果集,从而确定join操作的循环次数。小表驱动大表,减轻连接的次数。

12.extra

关于MySQL如何解析查询的额外信息,主要有以下几种:

Extra中包含的值:

  • using index: 只用到索引,可以避免访问表,性能很高。

  • using where: 使用到where来过滤数据, 不是所有的where clause都要显示using where. 如以=方式访问索引。

  • using tmporary: 用到临时表去处理当前的查询。

  • using filesort: 用到额外的排序,此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行。(当使用order by v1,而没用到索引时,就会使用额外的排序)。

  • range checked for eache record(index map:N): 没有好的索引可以使用。

  • Using index for group-by:__表明可以在索引中找到分组所需的所有数据,不需要查询实际的表。explain select user_id from t_order group by user_id;_

感谢你能够认真阅读完这篇文章,希望小编分享的“MySQL中EXPLAIN语句如何使用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中EXPLAIN语句如何使用

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL中EXPLAIN语句如何使用
    这篇文章主要介绍了MySQL中EXPLAIN语句如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在MySQL优化的环节上,我们首先需要知道的就是我们当前的这句SQL语句...
    99+
    2023-06-14
  • MySQL中EXPLAIN语句怎么使用
    这篇文章主要介绍了MySQL中EXPLAIN语句怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中EXPLAIN语句怎么使用文章都会有所收获,下面我们一起来看看吧。前言在MySQL中 DESCR...
    99+
    2023-06-30
  • MySQL中explain语句的使用方法
    小编给大家分享一下MySQL中explain语句的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、概述在 MySQL 中,我们可以使用慢查询日志或者 s...
    99+
    2023-06-14
  • MySQL中EXPLAIN语句及用法实例
    目录前言EXPLAIN 语法如下:1、获取表结构2、获取执行计划信息3、使用 EXPLAIN ANALYZE 获取信息总结 前言 在MySQL中 DESCRIBE 和 EX...
    99+
    2024-04-02
  • mysql 中如何使用explain
    本篇文章为大家展示了mysql 中如何使用explain,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 重点是第二种用法,需要深入的了解。 先看一个例子: ...
    99+
    2024-04-02
  • MySQL中explain如何使用
    这篇文章将为大家详细讲解有关MySQL中explain如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先是一个比较实际的用法,查询语句我们可以查看执...
    99+
    2024-04-02
  • MySQL 5.7 EXPLAIN EXTENDED语句说明
    EXPLAIN EXTENDED相比EXPLAIN命令,会额外显示一个filtered字段。这个字段会指示出表的条件所过滤的表中行数的百分比。除此之外,在执行EXPLAIN EXTENDED命令之后,使用S...
    99+
    2024-04-02
  • mysql 中alter语句如何使用
    这篇文章将为大家详细讲解有关mysql 中alter语句如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 1).修改表名...
    99+
    2024-04-02
  • MySQL中alter语句如何使用
    MySQL中alter语句如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。MySQL之alter语句用法总结 1:删除列ALT...
    99+
    2024-04-02
  • mysql语句中如何使用like
    这篇文章主要介绍了mysql语句中如何使用like,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql语句中like用法:1、搭配【%】使用...
    99+
    2024-04-02
  • mysql中declare语句如何使用
    在MySQL中,DECLARE语句用于声明一个局部变量或一个局部游标。DECLARE语句必须在存储过程或函数的开头部分使用。 以下是...
    99+
    2023-10-28
    mysql
  • MySQL中如何使用EXPLAIN命令
    这篇文章主要为大家展示了“MySQL中如何使用EXPLAIN命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中如何使用EXPLAIN命令”这篇文章吧...
    99+
    2024-04-02
  • 【MySQL】EXPLAIN 语句 各字段 详解
    EXPLAIN 语句 概貌 在连接查询的执行计划中: 每个表都会对应一条记录,这些记录的 id 列的值是相同的; 在包含子查询的执行计划中 :每个 select关键字都会对应一个唯...
    99+
    2023-10-27
    mysql 数据库
  • MySQL的explain如何使用
    本文小编为大家详细介绍“MySQL的explain如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL的explain如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • mysql中如何使用having语句
    这篇文章将为大家详细讲解有关mysql中如何使用having语句,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。说明用于过滤group by语句返回的记录表,通常与group by联合使用。hav...
    99+
    2023-06-20
  • MySQL中DROP USER语句如何使用
    小编给大家分享一下MySQL中DROP USER语句如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL中的DROP...
    99+
    2024-04-02
  • MySQL DQL语句如何使用
    本篇内容主要讲解“MySQL DQL语句如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL DQL语句如何使用”吧!DQLDQL英文全称是Data Query ...
    99+
    2023-07-05
  • Explain是怎么执行MySQL语句的
    这篇文章主要介绍“Explain是怎么执行MySQL语句的”,在日常操作中,相信很多人在Explain是怎么执行MySQL语句的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 如何在MySQL中使用truncate table语句
    如何在MySQL中使用truncate table语句?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Truncate table语句用来删除/截断表里的所有数据和delet...
    99+
    2023-06-14
  • PHP中如何使用MySQL删除语句
    今天小编给大家分享一下PHP中如何使用MySQL删除语句的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、MySQL删除语句...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作