广告
返回顶部
首页 > 资讯 > 数据库 >mysql 大表批量删除大量数据的实现方法
  • 563
分享到

mysql 大表批量删除大量数据的实现方法

mysql大表批量删除mysql大表批量 2022-05-11 21:05:21 563人浏览 独家记忆
摘要

问题参考自:https://www.zhihu.com/question/440066129/answer/1685329456 ,Mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业

问题参考自:https://www.zhihu.com/question/440066129/answer/1685329456 ,Mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉。请问如何操作?答案为个人原创

假设表的引擎是 Innodb, mysql 5.7+

删除一条记录,首先住这条记录,数据原有的被废弃,记录头发生变化,主要是打上了删除标记。也就是原有的数据 deleted_flag 变成 1,代表数据被删除。但是数据没有被清空,在新一行数据大小小于这一行的时候,可能会占用这一行。这样其实就是存储碎片。

之后,相关数据的索引需要更新,清除这些数据。并且,会产生对应的 binlog 与 redolog 日志
如果 delete 的数据是大量的数据,则会:

  • 如果不加 limit 则会由于需要更新大量数据,从而索引失效变成全扫描导致锁表,同时由于修改大量的索引,产生大量的日志,导致这个更新会有很长时间,锁表锁很长时间,期间这个表无法处理线上业务。
  • 由于产生了大量 binlog 导致主从同步压力变大
  • 由于标记删除产生了大量的存储碎片。由于 Mysql 是按页加载数据,这些存储碎片不仅大量增加了随机读取的次数,并且让页命中率降低,导致页交换增多。
  • 由于产生了大量日志,我们可以看到这张表的占用空间大大增高。

解决方案

我们很容易想到,在 delete 后加上 limit 限制控制其数量,这个数量让他会走索引,从而不会锁整个表。

但是,存储碎片,主从同步,占用空间的问题并没有解决。可以在删除完成后,通过如下语句,重建表:


alter table 你的表 engine=InnoDB, ALGoRITHM=INPLACE, LOCK=NONE;

注意这句话其实就是重建你的表,虽然你的表的引擎已经是 innodb 了,加上后面的, ALGORITHM=INPLACE, LOCK=NONE 可以不用锁表就重建表。

还有一种方案是,新建一张同样结构的表,在原有表上加上触发器:


create trigger person_trigger_update AFTER UPDATE on 原有表 for each row 
begin set @x = "trigger UPDATE";
Replace into 新表 SELECT * from 原有表 where 新表.id = 原有表.id;
END IF;
end;

这样可以保证线上业务有新数据会同步。之后,将所有企业类型的数据,插入新表,同时如果已存在则证明发生了更新同步就不插入。个体户数据由于业务变化,并不在这个表上更新,所以这样通过了无表锁同步实现了大表的数据清理

到此这篇关于mysql 大表批量删除大量数据的实现方法的文章就介绍到这了,更多相关mysql 大表批量删除内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

您可能感兴趣的文档:

--结束END--

本文标题: mysql 大表批量删除大量数据的实现方法

本文链接: https://www.lsjlt.com/news/10169.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql 大表批量删除大量数据的实现方法
    问题参考自:https://www.zhihu.com/question/440066129/answer/1685329456 ,mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业...
    99+
    2022-05-11
    mysql 大表批量删除 mysql 大表批量
  • MySQL 删除数据 批量删除(大量)数据
    在删除数据的时候根据不同的场景使用不同的方法,比如说删除表中部分数据、删除表的结构、删除所有记录并重置自增ID、批量删除大量数据等,可以使用delete、truncate、drop等语句。 一、方法分类 二、具体方法 类型语句删...
    99+
    2023-08-30
    mysql 数据库 java
  • oracle大数据量分批删除
    很多时候,我们要清理一个大表的数据,比如几个亿,业务还不能停,还只能delete,这种情况下分批删除是个好办法。 create or replace&n...
    99+
    2022-10-18
  • mysql快捷删除大量数据的方法
    这篇文章主要介绍了mysql快捷删除大量数据的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql捷删除大量数据的方法:首先创建临时表,...
    99+
    2022-10-18
  • Mysql在大表中删除大量数据的优化
    假设有一个表有3000万条记录,需要在业务不停止的情况下删除其中status=1的所有记录,差不多有600万条。 如果直接使用delete from tab_name where status=1; 会触发lock wa...
    99+
    2023-09-01
    mysql 数据库 sql
  • mysql实现批量删除的方法
    小编给大家分享一下mysql实现批量删除的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql实现批量删除的方法:使用s...
    99+
    2022-10-18
  • mysql中批量删除数据的方法
    mysql中批量删除数据的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql中批量删除数据的方法:首先找出符合条...
    99+
    2022-11-30
    mysql
  • mysql批量删除多个表的方法
    小编给大家分享一下mysql批量删除多个表的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql批量删除多个表的方法:使...
    99+
    2022-10-18
  • Mysql大数据批量插入方法
    MySQL是当前最流行的关系型数据库之一,大数据批量插入是MySQL中常用的操作之一。在处理大量数据时,如果一条一条地插入会极大地影响效率,因此批量插入是一个更好的选择,可以大大提高数据的处理速度。下面介绍几种MySQL大数据批量插入的方法...
    99+
    2023-09-14
    mysql 大数据 数据库
  • mysql删除大量数据会不会锁表
    MySQL在删除大量数据时会进行锁表操作,这可能会导致其他查询或写操作被阻塞,从而影响数据库的性能和吞吐量。 具体来说,MySQL在...
    99+
    2023-10-23
    mysql
  • 批量删除mysql一个库所有数据表方法
    批量删除mysql一个库所有数据表方法删除表的命令drop table 表名;如果有100张表,手工执行100次,想想就崩溃。下面提供一个使用information_schema库的方案来批量删除...
    99+
    2022-10-18
  • 数据库如何实现批量删除数据的操作方法
    这篇文章主要介绍数据库如何实现批量删除数据的操作方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!package com.mescs.baseinfo.utils; import ...
    99+
    2022-10-18
  • 大数据量删除的思考 - 2
        在这个简短系列的第1部分中,我提供了两个场景的非正式描述,在这些场景中,我们可以从表中进行大规模删除。没有一个具体的例子,很难想象删除数据的性质和可用的访问...
    99+
    2022-10-18
  • 大数据量删除的思考(四)
    在本系列的前一期文章中,我制作了一些图,突出显示了按表扫描执行大量删除操作和按索 引范围扫描执行大量删除之间的主要区别。 根据所涉及的数据模式,选择正确的策略可能对随机I/Os 的数量、生成的undo的数...
    99+
    2022-10-18
  • 大数据量删除的思考 - 1
        在最近一篇关于从表中删除列的文章里,我留下了一个悬而未决的问题,删除列之后你应该/可能会做什么?因为删除列只不过是“大量删除”的特殊情况。在这篇文章中,我计...
    99+
    2022-10-18
  • 大数据量删除的思考(二)
    在这个简短系列的第1部分中,我提供了两个场景的非正式描述,在这些场景中,我们可以从表中进行大规模删除。没有一个具体的例子,很难想象删除数据的性质和可用的访问路径会产生大数据量删除操作对系统的性能影响...
    99+
    2022-10-18
  • mysql大批量插入数据的4种方法示例
    前言 本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用,但是...
    99+
    2022-10-18
  • Python增量循环删除MySQL表数据的方法
    需求场景: 有一业务数据库,使用MySQL 5.5版本,每天会写入大量数据,需要不定期将多表中“指定时期前“的数据进行删除,在SQL SERVER中很容易实现,写几个WHILE循环就搞定,虽然MySQL中...
    99+
    2022-06-04
    增量 方法 数据
  • sql批量删除数据的方法是什么
    要批量删除数据,可以使用以下方法之一:1. 使用DELETE语句和WHERE子句:可以使用DELETE语句结合WHE...
    99+
    2023-09-16
    sql
  • 数据库大数据量删除的分析
    这篇文章主要介绍“数据库大数据量删除的分析”,在日常操作中,相信很多人在数据库大数据量删除的分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”数据库大数据量删除的分析”的疑惑...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作