开发的时候遇到一个分组取数据的问题。求大神解答

qq_23266223 2017-08-23 05:58:05
table
id user cost
1 A 10
2 B 5
3 B 7
4 A 11
5 C 9
查询出每个user cost最多的id,cost
考虑业务请求频繁(频繁的时候1分钟几百几千次),表大小100w左右
这种情况怎么解决,是仅仅用sql;
还是可以查出全部(其实是分段拿10个user,每个user大概也是10条左右的记录)然后用代码处理
...全文
655 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2017-11-22
  • 打赏
  • 举报
回复
表的总大小才100W数据量。。。那么建议如下: 1、建立联合索引,索引字段为:user, cost 2、使用分组查询语句: Select user, max(cost) From 表 Group By user 3、适当考虑做定期缓存,可以用另一张表来做,也可以程序内做。
岁月静静好 2017-11-21
  • 打赏
  • 举报
回复
select A.id,Max(A.cost) from table A group A.user
DoZX 2017-10-27
  • 打赏
  • 举报
回复
还是用缓存吧 夜深人静的时候更新一次缓存
java竹雨 2017-09-01
  • 打赏
  • 举报
回复
这种情况不用缓存,你的数据库压力好大,效率还不高
tianfang 2017-08-25
  • 打赏
  • 举报
回复
再创建一个表。记录用户的最大cost。 先导入一次,之后用trigger(拦截isert update),将用户最大cost复制到新表。 或者key-value cache,插入/更新对象时候,处理一次
qq_23266223 2017-08-24
  • 打赏
  • 举报
回复
怎么没人看,赶紧来人啊
into43 2017-08-24
  • 打赏
  • 举报
回复
select u.`user`,MAX(u.cost) from user u group by u.`user`
林二棍子 2017-08-24
  • 打赏
  • 举报
回复
假如是oracle: select * from ( select id, user, cost, rank() over(partition by user order by cost desc) as mm from table where user in('a', 'b') ) where mm= 1

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧