› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
luxinfl
V2EX  ›  MySQL

请教个问题,如何快速的删除 mysql 的数据

  •  
  •   luxinfl · Oct 12, 2024 · 3898 views
    This topic created in 719 days ago, the information mentioned may be changed or developed.

    是这样的,有张表 tableA,里面有 220 万条数据。 现在需要删除其中 130 多万条数据,而且这些数据还会有关联的业务表,通过 tableA 中的业务编号关联。 怎么才能快速清楚这些数据?直接 delete 的话应该会很慢的。 我看了执行计划,type=ALL,filter=100.00,extra=Using where

    19 replies  •  2024-10-14 11:33:26 +08:00
    ZZ74
        1
    ZZ74  
       Oct 12, 2024
    找个夜深人静执行 delete 或者写个程序慢慢删。
    就为了一个删除搞两张表数据同步双写之类的也耗时间,麻烦
    gitnot
        2
    gitnot  
       Oct 12, 2024
    insert select 后 改表名, 这么点洒洒水
    luxinfl
        3
    luxinfl  
    OP
       Oct 12, 2024
    @ZZ74 有人时时刻刻再推数据,感觉不是太保险。。
    luxinfl
        4
    luxinfl  
    OP
       Oct 12, 2024
    @gitnot 把需要的数据弄到一张新表是吧?但是关联表有七八张表,这也太费劲了。。
    ZZ74
        5
    ZZ74  
       Oct 12, 2024
    @luxinfl 推数据有什么不保险的,先确定一批数据比如 130W 条的主键及其关联的其他业务表的数据主键。然后低谷时定时执行,N 条一批 删除。
    securityCoding
        6
    securityCoding  
       Oct 12, 2024   ❤️ 1
    没懂,这点数据你敲完键盘下一秒就删完了
    tomatocici2333
        7
    tomatocici2333  
       Oct 12, 2024
    你这是要先理清除这些字段的血缘关系吧。要删得话,其他表和这个相关得数据也需要一起删?
    adoal
        8
    adoal  
       Oct 12, 2024
    你这 130 万条数据之间有相互关系不,是否一定要整体做原子删除,如果不是的话,分批慢慢删也没关系啊。
    paomianshi
        9
    paomianshi  
       Oct 12, 2024
    这种情况我一般是写个脚本自动分批跑
    ghost024
        10
    ghost024  
       Oct 12, 2024
    搞个跑批,要删的业务表应该都有删除的方法,根据表 a 的业务编号直接同步删除,然后这个操作分批进行(这种方式必须保证这些关联数据是完全独立的,要是两个记录共用一个数据就别删了),或者就是先在表 a 加个标志,逻辑删好了,也快的
    nerkeler
        11
    nerkeler  
       Oct 12, 2024
    其他的查出来放一张新表,旧表 truncate 命令删掉
    COW
        12
    COW  
       Oct 12, 2024
    搞个逻辑删除,is_deleted 置为 true 。
    akira
        13
    akira  
       Oct 13, 2024
    删除数据的时候 ,数据安全才是最重要的。。 速度其实并不重要。。
    Tubbs
        14
    Tubbs  
       Oct 13, 2024 via iPhone
    我们在生产中一般用 gh-ost 这种工具进行 ddl ,解决你说的数据在不断写入的问题,无锁无延迟的 ddl 速度会快很多
    Tubbs
        15
    Tubbs  
       Oct 13, 2024 via iPhone
    对于删除数据这种 dml 场景实际上也能用 gh-ost
    通过 gh-ost 复制表的结构到一个新的影子表,然后在这张表里应用删除逻辑,这样可以避免在原表上直接操作导致性能问题,操作的时候同时进行增量同步,最后切到新表就行
    siweipancc
        16
    siweipancc  
       Oct 13, 2024 via iPhone
    这时候 orm 就有用了,哈哈哈。
    没办法,梳理业务吧,不要删除,移动数据。
    8355
        17
    8355  
       Oct 14, 2024
    首先是这样啊,你应该没删过大量数据吧
    删除数据本身并不会释放磁盘空间,只是把这条数据在原始文件中增加标记,如果是需要释放空间关键在磁盘碎片的清理方案而不是删除本身
    上面有老哥说的没问题,130 万正常的生产数据库就是 1 秒就结束了。。
    luxinfl
        18
    luxinfl  
    OP
       Oct 14, 2024
    @nerkeler 我也想过把需要的数据 insert into select 出来,改个表名,这样应该很快
    luxinfl
        19
    luxinfl  
    OP
       Oct 14, 2024
    @Tubbs 比较原始,啥也没有。就用 navicate 删。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2309 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 05:15 · PVG 13:15 · LAX 22:15 · JFK 01:15
    ♥ Do have faith in what you're doing.