首页 > 单表分类取最值的SQL如何实现效率最高?

单表分类取最值的SQL如何实现效率最高?

现有实际需求如下:表TBL(userid,logintime,dat),userid为用户名(KEY),logintime为登录时间,dat为某些数据,请写SQL语句返回每个有记录的用户在最后一次登录所产生的userid,dat结果集。

这个问题其实是一个广谱性的问题,在很多场景下会遇到。那么对于这类单表分类(userid相同的视为一类)取最值(或者是最大两个或三个值)的问题,如何设计SQL才能使效率最高?


对logintime和userid都创建索引呢, 哪个效率会更高一些


@sub 同学先排序再 group by 的方法是可以的,这里再写一种效率更高的方法。当然对 logintime 建立索引是非常可取的一点。

select userid,dat from tbl t where t.logintime = (select max(logintime) from tbl where userid = t.userid)

参考:分组计算的SQL设计探讨


如果取最值是经常使用的操作,那么在更新数据和插入数据的时候,额外的维护一个最小值或者最大值集合就好了~


取值一定会用到order by 的,那么在order by 的字段(logintime)最后登录时间需要建一个索引,这样可以提高排序效率。

【热门文章】
【热门文章】