MySQL LeftJoin优化未果问题

MySQL 优化未果解决SQL查询慢的方案

场景再现

前几天遇到一个SQL优化的问题,场景是这样,有两个表A表和B表,AB表的关系是一对多的关系。A表数据是8万多,B表数据是几千多。现在要执行一个SQL,意思如下:

select a.id,b.time from a left join (select aid, max(b.time) as time from b group by aid) as db on a.id = b.aid

分页使用的是MyBatis的分页插件PageHelper,执行完成这条SQL大概是60s,开启了MySQL 缓存,AB表都建 了索引。(但是没起作用)由于我对索引研究不深,几番尝试之下,索引还是没能起作用。

解决方案

  • 方案一
    重写分页,每次取15条,然后总条数只统计主表A表。前台的过滤条件都放到主表去筛数据,速度没问题了,但是当前台过滤条件有从表B表的字段时,这种方案就不行了。
select a.id,b.time from (select a.id from a where .... limit 0,15) as a left join (select aid, max(b.time) as time from b group by aid) as db on a.id = b.aid
  • 方案二
    或许投机取巧了,优化表结构,主表A表增加字段time,将max(b.time)放到A表里。最后正常从A表拿数据。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值