yida1313
V2EX  ›  问与答

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

  •  1
     
  •   yida1313 · Jun 22, 2020 · 3179 views
    This topic created in 2192 days ago, the information mentioned may be changed or developed.
    之前发过帖子问数据导入的问题,现在导入已经 OK 了,数据量在 2 千万条左右,20 多列

    我用 SQL 做去重,去重语句查过一些资料,用的表连接做了优化。
    但 mysql 服务经常跑一半就停止服务了。。。成功的时候大约需要跑 10 来分钟的样子
    有啥解决方法不,再次感谢大家!
    Supplement 1  ·  Jun 22, 2020
    表的结构大概是
    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 replies    2020-06-22 22:28:14 +08:00
    littlepoem
        1
    littlepoem  
       Jun 22, 2020
    看有没有日期之类的隐藏条件,分下表
    1069401249
        2
    1069401249  
       Jun 22, 2020
    sql 发一下啊,比如 group by 可以用索引
    poisedflw
        3
    poisedflw  
       Jun 22, 2020
    表的创建 sql,还有你的查询 sql,不然没法帮你。
    yida1313
        4
    yida1313  
    OP
       Jun 22, 2020
    @poisedflw 已补充。。感谢!
    poisedflw
        5
    poisedflw  
       Jun 22, 2020
    @yida1313 加个 key idx_optime_usercode(oPtime, userCode)?
    marquina
        6
    marquina  
       Jun 22, 2020
    谁能告诉我 sql 里的 m2 是哪冒出来的
    oneoy
        7
    oneoy  
       Jun 22, 2020 via Android
    把时间换成时间戳会减少一三分一的查询时间
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5433 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 08:29 · PVG 16:29 · LAX 01:29 · JFK 04:29
    ♥ Do have faith in what you're doing.