请教一个sql 多表联查慢日志优化问题
发布于 3 年前 作者 panlongmao 3260 次浏览 来自 问答

SELECT ifNull(sum(test.score), 0) score, ifNull(dr.count, 0) AS win_times, ifNull(a.state, 5) AS user_state, m., u.pic, u.uname, u.reg_time, u.last_login, c.uid AS MASTER, c.admin FROM mahjong_cms.club_member m LEFT JOIN mahjong.user0 u ON m.uid = u.uid LEFT JOIN mahjong.active_user_stats a ON m.uid = a.uid AND m.club_id = a.clubid LEFT JOIN mahjong.win_lose test ON test.uid = m.uid AND m.club_id = test.club_id AND test.playtime >= 1625673600 LEFT JOIN ( SELECT count() AS count, uid FROM mahjong_cms.dyj_record WHERE club_id = 116692 AND date >= ‘2021-07-08’ GROUP BY uid ) AS dr ON m.uid = dr.uid LEFT JOIN mahjong_cms.club c ON c.id = m.club_id WHERE m.uid IN (88327, 83937) AND m. STATUS = 0 AND c.id = 116692 GROUP BY find_in_set(m.uid, “88327,83937”)

这个sql 在 正常测试执行都很快,但是在线上却把 阿里从库干爆了,不知道什么地方可以优化下?求指点

4 回复

可以用mysql的explain指令看下 测试环境和正式环境的数据量应该不一样,查询时扫描的行数也不一样

@dingyuanwu 这个看过了的,上面的数据在从库看是正常的,扫描行数也就8000不到,所有应该是前面已经产生了慢的查询,就是不知道为什么会产生慢的查询

可以看下数据库的监控数据,云上的数据库一般都有慢查询监控、统计的 如果explain显示扫描行数才8000的话,那么估计不是这条语句的问题 建议排查下其他语句

此类SQL问题应该用临时表、视图或过程解决为好

回到顶部