2、EXPLAIN和DESCRIBE(查询分析器)

本文介绍了如何使用MySQL中的EXPLAIN和DESCRIBE语句来分析查询语句,以提升数据库性能。通过分析查询语句的执行情况,可以识别瓶颈并进行优化。内容涉及了EXPLAIN的各个参数解释,如id、select_type、table、type等,帮助理解查询执行的详细信息。
摘要由CSDN通过智能技术生成

查询是数据库中最频繁的操作,提高查询速度可以有效的提高 MySQL 数据库的性能。本节主要介绍如何分析查询语句。

通过对查询语句的分析,可以了解查询语句的执行情况,找出查询语句执行的瓶颈,从而优化查询语句。在 MySQL 中,可以使用 EXPLAIN 和 DESCRIBE 获取 MySQL 执行 SELECT 语句的信息,来分析查询语句。

EXPLAIN 语句的基本语法如下:

EXPLAIN SELECT 语句;

“SELECT 语句”参数一般为数据库查询命令,如“SELECT * FROM tb_student”。通过 EXPLAIN 关键字可以分析后面 SELECT 语句的执行情况,并且能够分析出所查询表的一些内容。

例 1
下面使用 EXPLAIN 语句来分析一个查询语句。代码执行如下:

mysql> EXPLAIN SELECT * FROM tb_student \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tb_student
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 7
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.01 sec)

对以上结果中参数说明如下:
1)id
表示 SELECT 语句的编号,也就是在整个查询中 SELECT 的位置。如果在语句中没子查询或关联查询,只有唯一的 SELECT,每行都将显示 1。否则,内层的 SELECT 语句一般会顺序编号,对应于其在原始语句中的位置。

2)select_type
表示 SELECT 语句的类型,该参数有以下几个常用的取值:

  • SIMPLE:表示简单查询,其中不包括连接查询和子查询;
  • PRIMARY:表示主查询,或者是最外层的查询语句;
  • UNION:表示连接查询的第二个或后面的查询语句;
  • DEPENDENT UNION:连接查询中的第 2 个或后面的 SELECT 语句,取决于外面的查询;
  • UNION RESULT:连接查询的结果;
  • SUBQUERY:子查询中的第 1 个 SELECT 语句;
  • DEPENDENT SUBQUERY:子查询中的第 1 个 SELECT 语句,取决于外面的查询;
  • DERIVED:导出表的 SELECT(FROM 子句的子查询)。

4)table
表示查询的表;

5)type
表示表的连接类型。该参数有以下几个常用的取值,范围从 NULL 到 ALL。下面按照最佳类型到最差类型排序:

  • NULL:不用访问表或者索引,直接就能得到结果;
  • system:表示表中只有一条记录;
  • const:表示表中有多条记录,但只从表中查询一条记录;
  • eq _ref:类似 ref,表示多表连接时,后面的表使用了 UNIQUE 或者 PRIMARY KEY;
  • ref:表示多表查询时,后面的表使用了普通索引;
  • range:表示查询语句中给出了查询范围,常见于 <、<=、>、>=、between 等操作符;
  • index:表示对表中的索引进行了完整的扫描,MySQL 遍历整个索引来查询匹配的行;
  • ALL:表示对表进行了完整的扫描,MySQL 遍历全表来找到匹配的行。

6)possible_keys
表示查询中可以使用的索引;

7)key
表示实际查询中使用到的索引;

8)key_len
表示索引字段的长度;

9)ref
表示使用哪个列或常数与索引一起来查询记录;

10)rows
表示查询的行数;

11)filtered
MySQL 5.7 版本之前使用 EXPLAIN EXTENDED 时会出现这个字段,MySQL 5.7 版本之后包括 5.7 版本默认就有这个字段。这个字段表示存储引擎返回的数据在 server 层过滤后,剩下多少满足查询记录数量的比例。注意是百分比,不是具体记录数。

12)Extra
表示查询过程的附件信息。

DESCRIBE 语句的使用方法与 EXPLAIN 语句一样,DESCRIBE 语句的语法形式如下:
DESCRIBE SELECT语句;

DESCRIBE 可以缩写成 DESC。
例 2
下面使用 DESCRIBE 语句来分析一个查询语句。代码执行如下:

mysql> DESCRIBE SELECT * FROM tb_student \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: tb_student
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 7
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

可以看出,以上运行结果与例 1 基本相同,这里不再对上述参数进行说明,参考例 1 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值