V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
redorblacck886
V2EX  ›  程序员

Mysql 批量删除数据有啥好的方案?

  •  
  •   redorblacck886 · 53 天前 · 975 次点击
    这是一个创建于 53 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.写代码删、需要一批批的删除。要考虑事务长、超时问题。 2.写脚本删、怕锁表。造成阻塞 大佬们、你们删除批量数据怎么删除?

    11 条回复    2022-06-23 11:52:13 +08:00
    seanzxx
        1
    seanzxx  
       53 天前 via iPhone
    数量少的话 delete limit 呀,在负载低的时候删,数量多就建分区呀,改动大一点
    aitaii
        2
    aitaii  
       53 天前
    如果业务能中断 1 秒的话,创建一个表 A_1,rename 表,A->A_COPY, A_1->A A_COPY 删完数据拷贝到 A 表
    ch2
        3
    ch2  
       53 天前   ❤️ 2
    update set is_deleted=true
    binge921
        4
    binge921  
       53 天前
    drop taba
    toyassb
        5
    toyassb  
       53 天前 via iPhone
    rm datadir
    wtfedc
        6
    wtfedc  
       53 天前
    删除数据的时候,只是把数据标记成了 delete ,并没有节省物理空间。可以插入一条的时候,删多条
    lexin132
        7
    lexin132  
       53 天前
    把要删除的数据 id 保存到 redis 或者文件里,然后另外起个脚本读取 id 再按需删除?
    删除数据的场景下应该不会特别大量吧。。
    sunhuawei
        8
    sunhuawei  
       53 天前
    根据主键删;脚本设置好间隔时间能避免阻塞;如果是大量 sql 可以手动开启事务,手动提交,避免自动开启事务消耗大量时间;删除后记得重建索引
    cheng6563
        9
    cheng6563  
       53 天前
    while(true){
    int updateRows = executeUpdate("delete ... limit 100");
    if(updateRows == 0 ) break;
    Thread.sleep(200);
    }
    wineast
        10
    wineast  
       52 天前
    先把要删除的数据 select 出来,然后按照 where id=xxx and 过滤条件 双重保证来删除把,这样的脚本也符合安全审计的要求
    ramdava
        11
    ramdava  
       52 天前
    #3 楼正解
    话说,有什么业务场景需要批量删数据的?
    有什么业务场景是逻辑删除不可以解决的?
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1015 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 21:14 · PVG 05:14 · LAX 14:14 · JFK 17:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.