likes
comments
collection
share

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

作者站长头像
站长
· 阅读数 16

一次偶然的业务需求,需要实现有关联的两张表数据排序,其次需要支持分页,数据有一定的条件才能参与计算排序。画个图吧

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

首先我想到了表关联 LEFT JOIN ,越想越复杂,要考虑:GROUP BY分组,ORDER BY排序,SUM聚合,算了,从数据结构存储出发想想办法吧。

业务实现思路:当新增一条奖励记录时,当奖励记录的flag = 1时,有效时,我在用户表(冗余思路(空间换时间))创建一个字段来存储当前用户奖励有效数量,此时再进行查询排序时只处理一张用户表即可。业务代码如下:

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

业务需求:查询用户列表,支持分页,携带用户的奖励数量,没有奖励数量为0

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

总结:1位5个奖励,5位4个奖励,4位3个奖励

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

接口测试,用时:12ms


当我将此需求分享与我的同事,我的同事竟然写出了SQL,我读完同事写的SQL,不得不佩服,但是呢,SQL的计算略显复杂,一眼看效率不高,今日我就进行了测试

两张表的数量级

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

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

结果,与上面一致

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

用时:

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

数据结构牛逼还是sql牛逼数据结构存储 VS SQL,两条路,该如何抉择,我认为应该从 VS 转变到 AND 两者融合,

转载自:https://juejin.cn/post/7419958371448373289
评论
请登录