前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Explain使用心得

Explain使用心得

作者头像
用户9919783
发布2022-07-29 13:58:05
3150
发布2022-07-29 13:58:05
举报
文章被收录于专栏:后端从入门到精通

Explain可以检测我们的sql使用性能怎么样,是否有优化的地步。

首先我们要了解mysql查询优化器的执行效率,大约有10个,重点几个主要就是const,ref,range ,index,all。Const效率是最块的,成本可以忽略不计,主要通过主键或者唯一值查询的sql。还有比const更快的system,这种时候必须是mysql优化器内部精确计算查询成本,所以system不适用于innoDB,只适用于myISAM。Ref代表用的是索引b+tree查询的时候,比如用连接查询的时候,连接查询的条件是索引唯一值,这时候还分为eq-ref,er-ef是当被驱动表查询的是主键或者唯一二级索引的时候,这时候就是显示eq-ref。当连接表的条件是普通索引查询的时候,这时候显示就是ref,range顾名思义就是索引区间查询的时候,index代表查询覆盖索引的时候,all就是放弃索引全盘扫描了。

首先我们明白Semi-join使用条件在where或者on后面,必须in布尔组成,而且必须是and连接。

第一个参数是id,理论上几个select就有几个id,但当mysql优化器优化成内连接的时候,这时候只有一个id。

第二个参数是select type,这里有simple,只要不包含子查询或者union都算是simple,当有union的时候,最左边查询显示select type是primary,右边则是union类型,union还有union result类型,当union去重的时候,会创建临时表用来去重,这时候就显示union result。以及还有相关子查询union和不相关子查询。还有from后面连接select的派生查询,derived。当吧子查询物化后,子查询在与外部链接,这时候就是物化查询。

Possible key是可能用到的索引,在计算成本的时候,会根据使用全部查询还是索引查询效率更高,当回表的成本太高,会使用全表查询,所以possible key不是越多越好,而key就是实际查询使用到的索引,key_len代表长度,可以根据当前表的字符集来计算出索引长度,比如varchar100,utf8 是字符集1~3,则是100*3。

Ref这列,当查询的type是上面 的const,ref,index其中之一的时候,显示的是const,当使用函数的时候,显示的usering condition。

Rows就代表查询了多少行才获取到数据,当all的时候代表要查询所有的行数。

Filtered过滤有两种情况,一种是单表查询,当有索引和非索引查询,这里如果显示10,则代表过滤完索引之后,百分之10的数据满足非索引条件查询。当union联合查询的时候,这种是表示驱动表的扇出值,被驱动表满足百分之10的数据,和rows组合可以计算出扇出值。

Extra顾名思义,记录额外数据的地方,比如sql里面没有写表,会显示no table,当有函数max,min的时候也会显示,当覆盖索引的时候,显示useing index。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档