Mysql 关联查询的问题

在写业务时,遇到查询,因为数据量增大,导致查询时间冲着 5s 去了,想了一天也不知道该怎么优化,来求各位大佬支个招。

(1)三张表,每张表都有 5000 条左右的数据。

(2)consume 是主表,分别和 org 表和 admin 表有“一对多”关系。

(3)现需要对三张表进行联合查询,查询结果去重排序。

最开始使用的语句是,时间超过 10s 了:

SELECT * FROM consume WHERE uid IN (
             SELECT c.uid FROM consume AS c
              LEFT JOIN consume_admin AS a ON c.uid=a.consume_id AND a.deleted=0 
              LEFT JOIN consume_org AS o ON o.consume_id=c.uid AND o.deleted=0
              WHERE c.deleted=0 and a.deleted=0 and o.deleted=0 AND (a.user_id='126949' OR c.create_user_id='126949')) order by create_at desc;

然后百度了一下,稍微改进了一下,但还是不如意:

select c.* FROM consume AS c
              LEFT JOIN consume_admin AS a ON c.uid=a.consume_id AND a.deleted=0 
              LEFT JOIN consume_org AS o ON o.consume_id=c.uid AND o.deleted=0
							WHERE c.deleted=0 and a.deleted=0 and o.deleted=0 AND (a.user_id='126949' OR c.create_user_id='126949') group by c.uid order by c.create_at desc;

求各位大佬帮帮忙了!!

PS:发现把 admin 表和 org 表单独查一次,然后取到的 consume_id 再到 consume 表里用 uid IN 查询会更快,但是我看百度里说都是直接联表查询比这种分步的快,是我写的 sql 太差了么。

#悬赏#
全部评论
where 只卡第一张表C的,其余o和a表在on里 限制
点赞 回复 分享
发布于 2024-06-12 17:32 北京
“但是我看百度里说都是直接联表查询比这种分步的快”,不一定,哪个快用哪个
点赞 回复 分享
发布于 2024-06-07 15:57 广东

相关推荐

迷茫的大四🐶:干脆大厂搞个收费培训得了,这样就人均大厂了
点赞 评论 收藏
分享
10-24 00:54
已编辑
门头沟学院 Java
牛客20646354...:这连小厂都找不到就离谱,只能说可能你根本没投什么小厂。说实话现在都要11月了,没什么岗位了。其实最好是在9月找,那时候暑假工刚走,岗位多的是,现在都占满了岗位了,秋招的秋招,顶替暑假工的也基本上都顶替了。 只能多投了,简历其实都差不多,你这都不是外卖+点评去找实习了,已经比好多人优秀了。实在找不到,可以降低一些标准的,能投到自研项目的小厂说实话可能比你去中大厂能学到更多东西。因为中大厂最多给你看一点点模块功能,小厂基本上全部代码甚至几个项目的代码都能拿到。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务