巴扎黑2017-04-17 16:21:523楼
更新:
一个人只能回复一次,很忧伤
感谢几位抽出时间去帮我解题
测试了一下(5次平均)
在1w数据量的情况下,
@clcx_1315 :0.004s
@伊拉克 : 0.009s
@邢爱明 :0.006s
我自己的 :0.016s
在20w的数据量下:
@clcx_1315 :0.104s
@伊拉克 : 0.141s
@邢爱明 :0.165s
我自己的 :0.171s
所以@clcx_1315的方法最优,十分感谢,学到了一个思路。
从explain看,@clcx_1315的写法只做了2次全表遍历,其他都是3次,或许这就是原因了。
===========================之前的分隔线============================
琢磨了一种写法,但效率有待提高
select ta.user_id,ta.max_score,tb.min_time
from (
select a.user_id, max(a.score) max_score from active_gamescore a where a.active_id='58' group by a.user_id
) ta
join (
select a.user_id,a.score,min(a.created_at) min_time from active_gamescore a where a.active_id='58' group by a.user_id,a.score
) tb
on ta.user_id=tb.user_id and ta.max_score=tb.score
order by ta.max_score desc,tb.min_time asc
limit 20