请问一个单表的 sum group by order by 的sql 应该怎么优化?

【直播预告】计算中间件Linkis开源技术的应用和实践!>>>

sql如下:

select user_id,sum(num) num  from table where xx = 1 group by user_id order by num desc limit 50

我不想创建太多索引,因为这个表insert频率很高。

回答

select uid,nickname,headImg,sum(cost) as cost from buy_log where
currency=#{currency} and fixDate <![CDATA[ >= ]]> #{start} and fixDate <![CDATA[ <= ]]> #{end}
group by uid order by cost desc limit 0,#{limit}

我的也是这样的,已经最优了吧,没啥可优化的了

数据量大得话 还是得主从,这个语句需要在从库上加索引查,要是只有单库得话,还不想加索引,我想到得只能insert得时候,(消息队列)同时统计汇总到另外一个表,从另外一个表查,还不用sum、group by了,已经是汇总好了的数据,但是逻辑就复杂一些了

回复 @snailkky : 索引顺序:(user_id ,xx,num)这个索引应该怎么加呢

最好是加汇总表,定时操作

1.如果加了索引,基本已经没什么可以优化的了。

2.你可以考虑再加一个表,记录用户的汇总数据,如新加的表记录,某段时间的用户数据汇总,这样表就会变的很小,查起来就很快。

3.消费排行榜就可以这样做,每个月的月初将所有用户上个月按用户消费汇总记录到一个表里,显示排行榜时,查询这个表,再查询本月用户的消费汇总,然后将两次查询合并即可

4.也可以使用缓存,具体怎么做要根据实际需求来

以上是请问一个单表的 sum group by order by 的sql 应该怎么优化?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>