开发者社区> 问答> 正文

关于SQL优化的问题? 400 报错

关于SQL优化的问题? 400 报错

现在有一个需求,求用户流失的,现在数据库表字段是

login_time是登录时间.字段是时间戳类型.要求出1日流失.2日流失,三日流失和周流失人数.

流失计算公式:

1日:7月6日的1日流失用户数为7月6日登陆的用户在7月7日没有登陆的用户数      
2日:7月6日的1日流失用户数为7月6日登陆的用户为7月7-8日没有登陆的用户数      
3日:7月6日的3日流失用户数为7月6日登陆的用户为7月7、8、9日没有登陆的用户数      
周流失:7月6日的周流失数=6月30日-7月6日登陆过的用户在7月7日-7月13日没有登陆的用户数      

 

我现在的思路是,比如算1日流失:先算出在7/6号登录的人数,在算出7/6号登录的人并且7/7日也登录的人数.两个相减

问题在算7/6号登录的人并且在7/7日也登录的这个SQL太慢了.有没有大神设计一下!!

本人的sql  :select count(distinct wx_openid) from loginlog where login_time between '7/7号开始时间戳'  and '7/7号结束时间戳' and wx_openid in(select distinct wx_openid from loginlog where login_time between '7/6号开始时间戳'  and '7/6号结束时间戳' )  limit 1;

注意loginlog 都是大表

展开
收起
爱吃鱼的程序员 2020-06-01 11:49:43 522 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    先写个sql过滤下  login_time小于某个时间段的数据 要加索引  然后再写between查询结果

    ######回复 @叶峰2017 : 你现在的效率是多少 有试下先查询一次 再用结果集去查嘛######加了索引了,但是还是很慢,现在的数据量在,500W.我都要用脚本来统计好后查到一个缓存表里的######

    1、加索引。

    2、表如果很大的话,最好还是另外单独建一张统计表,定时统计。

    ######对的,我现在就是用脚本在凌晨跑完,然后早上他们用的话,读的是缓存表######

    可以尝试加一个字段,记录用户今天登陆后已经连续登陆了多少天。比如今天登陆了,昨天也登陆了那这个天数就是昨天的连续天数+1 否则就是重新变为1

    这样统计连续两天登陆的就是连续登陆的次数>1就好了

    ######开发那边不容许修改东西啊,很烦#######clickhouse# 了解一下?神速,mysql一键转入,专用函数,你会喜欢的。######

    in 太慢了,不妨分成两次查询,最后在内存中计算,会好些

    ######in里的结果级大概在4/5万左右,如果放内存用for循环查询,那查出来也要好久了
    2020-06-01 11:49:44
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载