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 太差了么。

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

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务