mysql explain

本文深入解析SQL执行计划,包括explain的使用,索引的重要性,执行计划字段解析,以及通过具体示例展示不同执行顺序和连接类型对查询效率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2条sql的执行对比

关联条件时就限制了b.dl_date,此时最终结果保留了所有的a表的记录

 

关联后过滤,此时左表没关联上的也被where过滤掉了,因为未关联的记录b.dl_date为NULL

 

 

1explain可以用于哪些操作?

   select

2 为什么使用索引?

   索引是一种有序的数据存储结构,使用它,是它根据某个key,创建了一颗索引树,它的数据记录比原表要少,走索引比全表扫描所经历的路径更短,这样使用它才有意义

3 explain的作用?

   查询优化器,执行它可以看到执行计划,计划中包含了几个信息,也就是它返回的几个字段各自代表什么含义,即下面的重点

4 执行计划都包含了哪几个字段,每个字段都大致反映出什么问题?

  id序号,值相同的位于同一级别,sql中的多表,执行是有先后顺序的,id越大越先执行,这点可以针对最近写的sql,时常加上explain看一看。时间长了,再到这里逐个记录

5各个字段适用的sql是什么样子的,有没有示例展示?

EXPLAIN
 SELECT  a.itemid,a.name AS itemname ,a.version,a.ItemCode AS contentcode,a.Exclusivity,
 a.ContentProviderID AS cpid,g.name AS cpname,
 a.spid,h.name AS spname,
 a.umcp,
 b.channeltype,b.channelcode,
 c.albumid, d.name AS albumname,
(SELECT GROUP_CONCAT(e.name) FROM masterdb.artistinfo e,masterdb.itemartist f WHERE  f.ItemID=a.ItemID AND e.ArtistID=f.ArtistID) itemartist

 FROM masterdb.iteminfo a
 LEFT  JOIN  (SELECT itemid ,TYPE AS channeltype,GROUP_CONCAT( channelcode  ORDER BY channelcode) channelcode  FROM  masterdb.item_channelinfo
 GROUP BY itemid,TYPE) b   ON b.itemid=a.itemid
 LEFT  JOIN  masterdb.itemalbum c ON c.itemid=a.itemid
 LEFT  JOIN  masterdb.albuminfo d ON d.albumid=c.albumid
 LEFT  JOIN  masterdb.contentproviderinfo  g ON g.ContentProviderID=a.ContentProviderID
 LEFT  JOIN  masterdb.contentprovidergroupinfo  h ON h.ContentProviderGroupID=a.spid
 WHERE a.copyright_source='AT' AND a.statusid=404 AND a.spid!=128

 分析:

  item_channelinfo作为子查询的表存在,select_type为Derived

 执行顺序,按照id,先执行序号大的,同序号的,从上到下依次执行,总结下来就是,优先执行子查询,再依次执行join表,注意:可以和join的先后不一致

type字段,对于前三个是ref类型,因为它的关联字段是主键或者索引,后面d,g,h是eq_ref 是因为他们的on连接字段只是关联表的普通字段

U_Key这个值其实是个联合索引

key是针对当前表的一个连接字段类型,是不是主键,是不是索引,没有就是null,ref是关联字段的名字

ref为const是一个常量,例如 id=5这样,只能返回一条,这里的面的a表其他是拿自己的每一个主键id去跟别的表做关联,对于每个id而言,它只会返回一条数据,所以是const ,还有一个system,是个特列,还不是很清楚,没遇到实例情况,rows就是返回的记录数,怎么计算的行数还不清楚   ??

key_len的值怎么计算的不清除,只知道越小越好  ???

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值