mysql join explain_参数join_buffer_size跟explain结果type的部分联系

当我们使用explain来查询sql语句的查询计划的时候,type(join type)字段是一个很重要的观察对象,在对join_buffer_size的使用说明中介绍了只有当type为ALL、

index和range的时候才会使用join_buffer_size,所以先来看看这3个类型的具体含义是什么:

ALL:A full table scan is done for each combination of rows from the previous tables,对涉及到的表进行全表扫描,当表的数据量比较大的时候,全表扫描是比较费时费力的操作,这种情况是我们要避免出现的。

index:A full index scan,对涉及到的索引进行索引扫描,跟ALL类似,在数据量较大的时候也是费时费力的操作,也是需要避免出现的情形。

range:使用索引查询一定范围的数据,这是我们可以接受的操作。

到这里可以结合join_buffer_size的介绍进行部分总结:ALL、index这种操作是最坏情况下的操作,即使使用了join_buffer_size,当数据量较大的情况下也不会有很好的性能。range使用了索引,查询部分数据,使用join_buffer_size是可以提升性能的。所以我们选择调优join_buffer_size参数的原因在于是否使用了很多join type为range的join查询,真实环境还是要结合表的数据量进行具体的评估和测试。

下面列出其他的explain的type内容:

system:当表数据只有一行的时候,explain的类型为system

const:当一张表中匹配的数据只有一行的时候,也就是说外层循环只会执行一次。

eq_ref:当表进行join的时候,每次循环取数据的时候只会从表中取出一行,也就是说使用了primary key 和unique key。这是我们比较希望看到的情形

ref:当查询使用到普通索引的时候,一个key值有可能从索引中取出若干行,这也是我们比较希望看到的情况。

fulltext:使用到全文索引的查询。

ref_or_null:类似ref,但是会额外的检查null值。我的观点是null最好避免在数据库中出现,null会进行额外的处理,影响部分性能,没有了null也能避免查询使用ref_or_null的方式来执行。

index_merge:查询使用了一张表的多个索引来取数据。

unique_subquery:当查询语句中有IN操作符的时候,mysql使用unique_subquery来执行查询,是类似ref的一种索引查找方式,适用于unique索引

index_subquery:当查询语句中有IN操作符的时候,mysql使用index_subquery来执行查询,是类似ref的一种索引查找方式,适用于普通索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值