推广

听说你对explain 很懂?

iseeyu2年前 (2024-02-21)推广149

image

select_type

关联类型,决定访表的方式。

image

SIMPLE

简单查询,代表没有子查询或者union

PRIMARY

如果不是简单查询,那么最外层查询就会被标记成PRIMARY。

UNION&UNION RESULT

从上图可以看出来了,包含联合查询,第一个被标记成了PRIMARY,union之后的查询被标记成UNION,以及最后产生的UNION RESULT

DERIVED

用来标记出现在from里的子查询,这个结果会放入临时表中,也叫做派生表。

image

这个对于低版本的Mysql可能显示是这样的,高一点可能你看到的还是PRIMARY,因为被Mysql优化了。我换一个版本的Mysql和SQL执行可以验证到这个结果。

image

SUBQUERY

不在from里的子查询。

image

DEPENDENT

代表关联子查询(子查询使用了外部查询包含的列),和UNIONSUBQUERY组合产生不同的结果。

image

UNCACHEABLE

代表不能缓存的子查询,也可以和UNIONSUBQUERY组合产生不同的结果。

image

MATERIALIZED

物化子查询是Mysql对子查询的优化,第一次执行子查询时会将结果保存到临时表,物化子查询只需要执行一次。

比如上述DERIVED就是物化的一种体现,与之对应的就是DEPENDENT,每次子查询都需要重新调用。

这个结果无法直观的看出来,可以用FORMAT=JSON命令查看materialized_from_subquery字段。

image

table

显示表名,从上述的一些图中可以观察到UNION_RESULT和DERIVED显示的表名都有一些自己的命名规则。

比如UNION_RESULT产生的是<unionM,N>,DERIVED产生的是<derivedN>。

partitions

数据的分区信息,没有分区忽略就好了。

type

关联类型,决定通过什么方式找到每一行数据。以下按照速度由快到慢。

system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL。

image

system&const

这通常是最快的查找方式,代表Mysql通过优化最终转换成常量查询,最常规的做法就是直接通过主键或者唯一索引查询。

image

而system是const的一个特例(只有一行数据的系统表),随便找一张系统表,就插入一条数据就可以看到system了。

image

eq_ref

通常通过主键索引或者唯一索引查询时会看到eq_ref,它最多只返回一条数据。user_id是唯一索引,为了测试就关联以下主键索引。

image

ref

也是通过索引查找,但是和eq_ref不同,ref可能匹配到多条符合条件的数据,比如最左前缀匹配或者不是主键和唯一索引。

最简单的办法,随便查一个普通索引就可以看到。

image

fulltext

使用FULLTEXT索引

ref_or_null

和ref类似,但是还要进行一次查询找到NULL的数据。

这相当于是对于IS NULL查询的优化,如果表数据量太少的话,你或许能看到这里类型是全表扫描。

image

index_merge

索引合并是在Mysql5.1之后引入的,就像下面的一个OR查询,按照原来的想法要么用name的索引,要么就是用age的索引,有了索引合并就不一样了。

对于这种单表查询(无法跨表合并)用到了多个索引的情况,每个索引都可能返回一个结果,Mysql会对结果进行取并集、交集,这就是索引合并了。

image

unique_subquery

按照官方文档所说,unique_subquery只是eq_ref的一个特例,对于下图中这种in的语句查询会出现以提高查询效率。

由于Mysql会对select进行优化,基本无法出现这个场景,只能用update这种语句了。

image

index_subquery

和unique_subquery类似,只是针对的是非唯一索引。

image

range

看名字就知道,范围查询,其实就是带有限制条件的索引扫描。

常见的范围查询比如between and,>,<,like,in 都有可能出现range。

image

index

跟全表扫描类似,只是扫表是按照索引顺序进行。

ALL

全表扫描,没啥好说的。

possible_keys

可以使用哪些索引。

key

实际决定使用哪个索引。

key_len

索引字段的可能最大长度,不是表中实际数据使用的长度。

ref

表示key展示的索引实际使用的列或者常量。

rows

查询数据需要读取的行数,只是一个预估的数值,但是能很直观的看出SQL的优劣了。

filtered

5.1版本之后新增字段,表示针对符合查询条件的记录数的百分比估算,用rows和filtered相乘可以计算出关联表的行数。

Extra

解析查询的附加额外信息,这个太多了,有兴趣可以自己看官方文档,只列举一些常见的。

Using index

使用覆盖索引。

Using index condition

使用索引下推,索引下推简单来说就是加上了条件筛选,减少了回表的操作。

image

Using temporary

排序使用了临时表。

Using filesort

使用外部索引文件排序,但是不能从这里看出是内存还是磁盘排序,我们只能知道更消耗性能。

Using where

where过滤,没啥好说的。

Zero limit

除非你写个LIMIT 0。

Using sort_union(), Using union(), sing intersect()

使用了索引合并,参看上文。

总结

image

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://0291.com.cn/post/57544.html

相关文章

我来教你网站建成之后该如何选择服务器。

我来教你网站建成之后该如何选择服务器。

当我们网站建设好后怎么选择一个合适的呢?这可能是很多客户比较头疼的事情,不知道怎么样的服务器好,适合自己。服务器对一个网站来说是非常重要的,每个人都希望自己的服务器有很好的稳定性以及访问速度快,这样是可以很好的帮助网站进行推动,那么我们在买服务器的时候一定要注意,并不是所有的服务器都是适合自己网站使...

想通过社群裂变涨粉?按这9步走就行

想通过社群裂变涨粉?按这9步走就行

  社群裂变作为目前热门的涨粉技巧,其效果确实是十分强大,不过对许多人来说它只是一个模糊的概念,全盘具体如何操作,看作者九步为你厘清。 不得不说,作为目前市面最有效的推广之一,裂变涨粉的效果绝对的一流的,现在能打败它的方式就只有微信把这类玩法封禁掉。 社群裂变对很多人来说似...

拼多多集成国际是正品吗?深度剖析为您解答!

拼多多集成国际是正品吗?深度剖析为您解答!

随着互联网的发展,电商平台逐渐崛起,给我们的生活带来了极大的便利。然而,在享受便利的同时,我们也面临着一个难题:如何判断购买的商品是否是正品?尤其是对于一些国际品牌,如拼多多集成国际,消费者们总是心存疑虑。那么,拼多多集成国际是正品吗?我将从几个方面为大家详细解答。 我们要明确,正品...

小编分享中小企业通过全网推广营销能得到什么。

小编分享中小企业通过全网推广营销能得到什么。

网站对于国内的来说,已经不是什么新鲜事物。现在很多公司都有自己的网站,但是,网络营销究竟能给企业带来什么?网站对于中小企业来说,究竟有没有用?应该看到,全网推广专家表示,网站正在给一些中小企业带来不可代替的作用,带来的巨大的效益,特别是外向性的企业,正享受这个新渠道给企业带来的好处。 网...

什么是整合营销?整合营销公司是干什么的?

整合是什么?整合营销就是通过对各种营销工具和手段进行系统化的结合,根据环境进行实时的动态修正。让交换双方在合作中获得收益的营销理念与方法。营销整合是通过对、人员。目的等多个方位的整合,并不是单纯的多方位。而是通过把每个独立营销的活动综合成一个整体。来达到一加一大于二的效果。...

处理网站跳出率的办法。

处理网站跳出率的办法。

网站跳出率是衡量网站内容有好坏的重要目标,那么多少跳出率才是正常的?每一个企业的网站性质都是不一样的,聊城SEO也没有办法给出一个准确的答案,每一个网站肯定都期望自己的网站跳出率越低越好,假如发现网站的跳出率太高怎么办呢?不必忧虑,能够经过洗面这些方法来对你的网站进行调节优化。 1、能够看看网站老...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片