您的位置:首页 > 数据库 > MySQL

MySQL LeftJoin优化未果问题

2017-08-07 14:49 204 查看

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表拿数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: