数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,
一次偶然的业务需求,需要实现有关联的两张表数据排序,其次需要支持分页,数据有一定的条件才能参与计算排序。
画个图吧
首先我想到了表关联 LEFT JOIN
,越想越复杂,要考虑:GROUP BY
分组,ORDER BY
排序,SUM
聚合,算了,从数据结构存储出发想想办法吧。
业务实现思路:当新增一条奖励记录时,当奖励记录的flag = 1
时,有效时,我在用户表(冗余思路(空间换时间))创建一个字段来存储当前用户奖励有效数量,此时再进行查询排序时只处理一张用户表即可。业务代码如下:
业务需求:查询用户列表,支持分页,携带用户的奖励数量,没有奖励数量为0
总结:1位5个奖励,5位4个奖励,4位3个奖励
接口测试,用时:12ms
当我将此需求分享与我的同事,我的同事竟然写出了SQL,我读完同事写的SQL,不得不佩服,但是呢,SQL的计算略显复杂,一眼看效率不高,今日我就进行了测试
两张表的数量级
SQL如下:
SELECT
u.`id`,
u.`name`,
SUM( CASE WHEN a.flag = 1 THEN 1 ELSE 0 END ) awardCount
FROM
tb_user u
LEFT JOIN tb_award a ON u.id = a.user_id
GROUP BY
u.id
ORDER BY
SUM( CASE WHEN a.flag = 1 THEN 1 ELSE 0 END ) DESC
LIMIT 10
结果,与上面一致
用时:
转载自:https://juejin.cn/post/7419958371448373289