EXPLAIN 语法(得到SELECT 的相关信息)

本文详细介绍了MySQL中的EXPLAIN语法,用于获取SELECT查询的相关信息,包括表的连接顺序、索引使用等。通过理解EXPLAIN输出的结果,可以有效地优化查询性能,例如调整表连接顺序、创建合适索引等。文中通过示例展示了如何通过EXPLAIN分析多表联接查询的性能,并给出优化建议。
摘要由CSDN通过智能技术生成

7.2.1 EXPLAIN 语法(得到SELECT 的相关信息)

 原文地址 http://imysql.cn/?q=node/35

EXPLAIN tbl_name

或者:

EXPLAIN SELECT select_options

EXPLAIN 语句可以被当作 DESCRIBE 的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息。

  • EXPLAIN tbl_name 语法和 DESCRIBE tbl_nameSHOW COLUMNS FROM tbl_name 一样。
  • 当在一个 SELECT 语句前使用关键字 EXPLAIN 时,MYSQL会解释了即将如何运行该 SELECT 语句,它显示了表如何连接、连接的顺序等信息。

 

本章节主要讲述了第二种 EXPLAIN 用法。

EXPLAIN 的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让 SELECT 运行更快。

如果由于不恰当使用索引而引起一些问题的话,可以运行 ANALYZE TABLE 来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择。详情请看"14.5.2.1 ANALYZE TABLE Syntax"。

您还可以查看优化程序是否以最佳的顺序来连接数据表。为了让优化程序按照 SELECT 语句中的表名的顺序做连接,可以在查询的开始使用 SELECT STRAIGHT_JOIN 而不只是 SELECT

EXPLAIN 返回了一行记录,它包括了 SELECT 语句中用到的各个表的信息。这些表在结果中按照MySQL即将执行的查询中读取的顺序列出来。MySQL用一次扫描多次连接(single-sweep, multi-join) 的方法来解决连接。这意味着MySQL从第一个表中读取一条记录,然后在第二个表中查找到对应的记录,然后在第三个表中查找,依次类推。当所有的表都扫描完了,它输出选择的字段并且回溯所有的表,直到找不到为止,因为有的表中可能有多条匹配的记录下一条记录将从该表读取,再从下一个表开始继续处理。

在MySQL version 4.1中,EXPLAIN 输出的结果格式改变了,使得它更适合例如 UNION 语句、子查询以及派生表的结构。更令人注意的是,它新增了2个字段: idselect_type。当你使用早于MySQL 4.1的版本就看不到这些字段了。

EXPLAIN 结果的每行记录显示了每个表的相关信息,每行记录都包含以下几个字段:

id  本次 SELECT 的标识符。在查询中每个 SELECT 都有一个顺序的数值。

select_type  SELECT 的类型,可能会有以下几种:  

SIMPLE - 简单的 SELECT (没有使用 UNION 或子查询 PRIMARY - 最外层的 SELECT UNION - 第二层,在 SELECT 之后使用了 UNIO DEPENDENT UNION - UNION 语句中的第二个 SELECT,依赖于外部子查 SUBQUERY - 子查询中的第一个 SELEC DEPENDENT SUBQUERY - 子查询中的第一个 SUBQUERY 依赖于外部的子查 DERIVED - 派生表 SELECTFROM 子句中的子查询)  
table   记录查询引用的表。    type   表连接类型。以下列出了各种不同类型的表连接,依次是从最好的到最差的:
  system
表只有一行记录(等于系统表)。这是 const 表连接类型的一个特例。

 

 

const
表中最多只有一行匹配的记录,它在查询一开始的时候就会被读取出来。由于只有一行记录,在余下的优化程序里该行记录的字段值可以被当作是一个恒定值。 const 表查询起来非常快,因为只要读取一次! const 用于在和 PRIMARY KEYUNIQUE 索引中有固定值比较的情形。下面的几个查询中, tbl_name 就是 const 表了:

 

SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM tbl_name
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值