Mysql查询优化

项目需要查询游戏用户的流失用户,对于流失用户的定义为:当天登陆,之后三天未登录的用户视为流失用户,目前有数据表login_info分别存储了用户id,登陆时间(int11)。

最简单的实现方式:SELECTDISTINCTuidfromlogin_infoWHERElogin_timebetween$time1['begin']AND$time1['end']

anduidnotin(selectDISTINCTuidfromlogin_infowherelogin_timebetween$time2['begin']and$time2['end'])其中的$time1存储为一天的时间起止$time2存储为流失的时间范围(这里是三天),但是实际当中查询速度相当慢。

群里找了个高手,给出了另外一种解决办法,最终sql如下:

selectuidfrom(selectuid,MAX(login_time)asmax,MIN(login_time)asminFROMlogin_infowherelogin_timebetween1361721600and1362067199GROUPBYuid)asA

wheremaxbetween1361721600AND1361807999

查询时间大大缩短,不得不佩服高手啊!!!具体就不做解释了

相关推荐