您好,欢迎来到站长目录(28sn.com)!


MySQL的EXPLAIN其实很简单

来源:网络整理 浏览:313次 时间:2022-12-05

EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法,使用起来也非常简单,只需在SELECT(同样适用DELETE、UPDATE,本质还是SELECT)语句前加上EXPLAIN关键字即可,MySQL会返回关于在执行计划中的每一步的信息。

创建两个表用来测试验证下,product_category,product_info商品类目表和商品信息表。

----

先来看一个简单的示例:

explain select t.* from product_info t where t.product_id = 122;

返回如下信息:

1. id列

MySQL的查询可以分为简单类型和复杂类型,复杂类型又分为简单子查询,派生表(FROM子句中的子查询),UNION查询。如果只是一个简单查询,那id就会显示1,如果包含子查询,id会顺序编号。通常子查询中,id值大的优先执行。id相同的由上至下执行。

注意id值要结合具体sql语句,不能只看大小,例如:

explain select t.*,(select c.category_name from product_category c where c.category_type = t.category_type) from product_info t where t.product_id = 122;

结果如下:

子查询是DEPENDENT SUBQUERY,要依赖于主查询,所以执行顺序还是先执行id为1的查询,然后再执行id为2的查询。

----

2. select type列

此列展示了对应的row是简单查询还是复杂查询,常见的取值包含:

SIMPLE:不包含子查询和UNION

PRIMARY:外层查询

SUBQUERY:子查询

DEPENDENT SUBQUERY :依赖于外层查询的子查询

DERIVED:派生表查询

----

3. type列

(table和partitions表明正在访问的表和表分区,略过吧),type是访问类型,表明MySQL决定如何查找表中的行。取值包含如下(性能由差到好):

all:最差的全表扫描

index:a.跟全表一样,只是扫描时按索引次序进行而不是行,主要优点是避免了排序,但全表扫描依旧开销很大。b.如果在Extra出现"Using index"时,说明正在使用覆盖索引,只扫描索引的数据,开销相对全字段小很多。

比较两个简单的示例:

explain select t.product_name from product_info t order by t.product_id;

type是index,还是全表扫描。

explain select t.product_id from product_info t;

type是index,Extra是"Using index",只需扫描索引数据。

range:范围扫描,只检索给定范围内的行,当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN、LIKE或IN()运算符将字段列与常量进行比较时,可以使用Range。

例如:

explain select t.product_id from product_info t where t.product_id between 1000 and 2000;

ref:ref可用于使用=或<=>运算符进行比较的索引列,可以简单理解为使用了非主键、非唯一的索引。

例如,某个经常出现在条件查询的字段需要填加索引,但这个列值并不唯一。

explain select * from product_category c where c.category_name = '电器3C'

eq_ref:可以简单理解为走主键索引或唯一索引查找目标行。

const:匹配单行,走主键索引或唯一索引,通常根据主键查询某条记录的详情就是const了。

system:只有一行记录的表,属于const的特例,略过吧。

----

4 rows和filtered列

rows是MySQL评估为了找到所需的行而要读取的行数,可能不是很精准,读取的行数当然越小越好了。filtered是用来评估根据查询条件过滤数据的百分比,最大是100,这个也是越小越好了。rows × filtered就是可能用到的行数了。

----

5 possible_keys列

这一列罗列出查询可以使用哪些索引,是在优化过程早起创建的,可能对于后续优化过程并无用处。

----

6 key列

key就是索引了,显示可以走哪一个索引可以最小化查询成本。

----

7 key_len列

此列显示了索引字段使用的字节数,即索引字段最大可能的长度,并非实际长度。不过也差不多,毕竟数据表字段大小是按需设计的。显然字段过长的值并不适合用作索引。例如,把一些诸如个人简介、文章内容类的字段建立索引是不恰当的。


推荐站点

  • 我爱发烧音乐我爱发烧音乐

    我爱发烧音乐囊括了从流行音乐到古典音乐多个类型的音乐作品,专栏推荐最新的音乐,提供音乐排名榜单!可供免费线上收听音乐,歌曲流畅,音效极佳! 网站提供的钢琴以及二胡专栏,可供收听者,陶冶情操,改善心情,是难得的轻音乐典藏!

    www.520fs.com
  • 世纪音乐网世纪音乐网

    世纪音乐网是专业的在线音乐试听MP3下载网站。歌曲总计30余万首,收录了网上最新歌曲和流行音乐,DJ舞曲,非主流音乐,经典老歌,劲舞团歌曲,搞笑歌曲,儿童歌曲,英文歌曲等。是您上网听歌的最佳网站。

    www.ssjj.com
  • 杭州网杭州网

      杭州网是杭州地区唯一的新闻门户网站,由中共杭州市委宣传部、杭州日报报业集团和杭州广播电视集团共同组建的杭州网络传媒有限公司运营。

    www.hangzhou.com.cn
  • 深圳在线深圳在线

      深圳在线 www.szol.net是深圳本地最大、最早的地方生活资讯网站之一,网站名“深圳在线www.szol.net”由南方报业传媒集团编辑委员会总编辑、南方日报社总编辑、南方都市报总编辑、南方书画院名誉院长王春芙亲笔题名,深圳在线www.szol.net团队与深圳热线www.szonline.net、奥一网www.oeeee.com都源于全国最早成立于1996年的知名网络公司——深圳万用网。

    www.szol.net
  • 今题网今题网

     今题网- 中国领先的社区服务网,提供社区服务, 在线交友和商家推广服务,于2004年创建上线,公司现有员工超过百名。今题网自成立以来,凭借其独特的定位和丰富的社区交友功能, 凭借其团队超强的搜索引擎优化技术吸引超过千万的用户成为今题网的注册会员。

    www.jinti.com

鄂公网安备 42062502000001号