V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yida1313
V2EX  ›  问与答

mysql 做千万级数据去重,总卡死,求指导

  •  1
     
  •   yida1313 · 2020-06-22 17:16:04 +08:00 · 2347 次点击
    这是一个创建于 1639 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前发过帖子问数据导入的问题,现在导入已经 OK 了,数据量在 2 千万条左右,20 多列

    我用 SQL 做去重,去重语句查过一些资料,用的表连接做了优化。
    但 mysql 服务经常跑一半就停止服务了。。。成功的时候大约需要跑 10 来分钟的样子
    有啥解决方法不,再次感谢大家!
    第 1 条附言  ·  2020-06-22 19:31:40 +08:00
    表的结构大概是
    ID | userCode | opTime | operations | ……(共 20 多列)
    自增 | 用户编号 | 操作时间 | 操作内容 | ……

    操作时间这列我在导入的时候只保留了年月日,是字符串格式的( yyyy-mm-dd )

    我需要按天对用户编号进行去重,就是说需要统计每天都有哪些用户用过系统,用户在系统里操作了什么,操作了多少次先不管。

    我用的去重语句
    insert into table2
    select m1.* from table1 m1, (select min(m2).id id from table1 group by m2.opTime,m2.userCode) m3
    where m1.id = m3.id

    把去重后的数据存到另一个表里。
    7 条回复    2020-06-22 22:28:14 +08:00
    littlepoem
        1
    littlepoem  
       2020-06-22 17:42:38 +08:00
    看有没有日期之类的隐藏条件,分下表
    1069401249
        2
    1069401249  
       2020-06-22 17:51:14 +08:00
    sql 发一下啊,比如 group by 可以用索引
    poisedflw
        3
    poisedflw  
       2020-06-22 17:53:34 +08:00
    表的创建 sql,还有你的查询 sql,不然没法帮你。
    yida1313
        4
    yida1313  
    OP
       2020-06-22 19:32:42 +08:00
    @poisedflw 已补充。。感谢!
    poisedflw
        5
    poisedflw  
       2020-06-22 19:50:40 +08:00
    @yida1313 加个 key idx_optime_usercode(oPtime, userCode)?
    marquina
        6
    marquina  
       2020-06-22 20:38:35 +08:00
    谁能告诉我 sql 里的 m2 是哪冒出来的
    oneoy
        7
    oneoy  
       2020-06-22 22:28:14 +08:00 via Android
    把时间换成时间戳会减少一三分一的查询时间
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1119 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:01 · PVG 03:01 · LAX 11:01 · JFK 14:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.