首页 运维知识 mysql用explain来优化sql语句操作详解

mysql用explain来优化sql语句操作详解

可以帮助选择更好的索引和写出更优化的查询语句,可以帮助选择更好的索引和写出更优化的查询语句。对某个query优化中,需要不断的explain来验证各种调优是否有效。 EXPLAIN…

可以帮助选择更好的索引和写出更优化的查询语句,可以帮助选择更好的索引和写出更优化的查询语句。对某个query优化中,需要不断的explain来验证各种调优是否有效。
EXPLAIN各列的含义:

id Mysql Query Optimizer选定的执行计划中的序列号(查询序列号)
select_type select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。
table 所引用的表。
type 显示的是访问类型,结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > range > index > ALL说明:

  • const 读常量,只读一次,一般是主键
  • eq_ref 最多只会有一个匹配结果,一般是通过主键或者唯一索引来访问
  • ref 这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中 读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好
  • unique_subquery 子查询中返结果字段组合是主键或唯一索引
  • range 索引范围扫描,使用 > 或 < 时发生
  • index 全索引扫描
  • ALL 全表扫描,这一般比较糟糕,应该尽量避免
possible_keys 指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。
这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。
key 显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL
ref 显示哪个字段或常数与key一起被使用。
rows 通过收集系统信息估算出来的结果记录条数
extra 查询中,每一步会进行的额外信息

举例:

mysql > explain select mail from user where uid in(select user_id from share_info where share_id=1)
+----+--------------------+------------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type        | table      | type  | possible_keys | key     | key_len | ref   | rows | Extra       |
+----+--------------------+------------+-------+---------------+---------+---------+-------+------+-------------+
|  1 | PRIMARY            | user       | ALL   | NULL          | NULL    | NULL    | NULL  |  542 | Using where |
|  2 | DEPENDENT SUBQUERY | share_info | const | PRIMARY       | PRIMARY | 4       | const |    1 |             |
+----+--------------------+------------+-------+---------------+---------+---------+-------+------+-------------+

这里执行计划,是按照ID的大小,从大向小执行。
第一步,访问share_info,查询方式是:DEPENDENT SUBQUERY,对所需数据的访问方式是索引扫描,过滤的条件是常数,所以类型为const,所用到的索引是主键。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 小小编

为您推荐

dell R710 更换raid卡后,raid卡信息没有了,处理方案

dell R710 更换raid卡后,raid卡信息没有了,处理方案

1.将一台服务器(A)的硬盘依次拔出,按相同顺序插入另一台同样配置的服务器(B) 2.启动服务器(B) 3.按提示键盘按...
PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

下载 并安装 PL SQL Developer 13,默认支持中文语言 ========================...
关于一条sql语句在mysql中是如何执行的

关于一条sql语句在mysql中是如何执行的

最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在my...
关于sql注入姿势总结(mysql)

关于sql注入姿势总结(mysql)

前言 学习了sql注入很长时间,但是仍然没有系统的了解过,这次总结一波,用作学习的资料。 从注入方法分:基于报错、基于布...
关于Oracle SQL外连接

关于Oracle SQL外连接

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。 连接...

发表回复

返回顶部