mysql inner join原理_由一个场景分析Mysql的join原理

背景

这几天同事写报表,sql语句如下

select *from`sail_marketing`.`mk_coupon_log`a left join `cp0`.`coupon`c on c.code_id =a.coupon_code;

查询出来的结果花了60多秒

数据背景

mk_coupon_log表数据 9368

coupon表数据37735

mk_coupon_log表的coupon_code字段有索引

分析过程

分析原始sql语句

explain

select * from `sail_marketing`.`mk_coupon_log` a left join `cp0`.`coupon` c on c.code_id = a.coupon_code;

635c91329f45ef1d9b0370ba1abae1c1.png

type都是ALL,即全表查询,没有用到索引,其中Extra列出现 Using join buffer (Block Nested Loop),从字面意思理解用到了缓存跟循环

其中a表也没用到coupon_code列的索引

一般情况下,第一行称为驱动表,第二行称为被驱动表,从上图可知,a表示驱动表,c表示被驱动表

果断给coupon表的code_id字段加上索引

58cba19ffbfa8f11f2221c9288de7e0b.png

增加索引之后查询时间0.136秒,分析其sql语句

explain

select * from `sail_marketing`.`mk_coupon_log` a left join `cp0`.`coupon` c on c.code_id = a.coupon_code;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值