MySQL LeftJoin优化未果问题

来源:互联网 发布:女生自夸的网络句子 编辑:程序博客网 时间:2024/06/02 06:38

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表拿数据。
原创粉丝点击