Mysql删除几亿条数据表中的部分数据

news2024/11/28 19:46:09

1、需求

老项目,实时数据还是用mysql去存储的,而且又没有定时去清理数据的程序。目前这些实时数据只需保留近半年的即可。

其他几张实时表数据量没有这么夸张。

我随即用

delete from table_name where id < 39000000 limit 10000

但是几亿条记录用这个方法太慢了。

2、方案

虽然之前也处理过类似问题,但还是随手问了一下AI,有无更优解。


在MySQL中删除一个大表(例如含有几亿条记录)中的数据时,需要特别注意操作的性能和对系统的影响。如果您的目标是删除半年前的数据,您可以采用以下几种策略来高效地完成这项任务:

1. 使用 DELETE 语句分批删除

一种常见的方法是使用 DELETE 语句,并通过分批删除数据来减轻数据库的压力。这可以通过在 DELETE 语句中添加 LIMIT 子句来实现。

示例 SQL 语句
1-- 定义每批删除的数量
2SET @batch_size = 100000; -- 每次删除 10 万条记录
3SET @counter = 0;
4
5-- 确定半年前的日期
6SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);
7
8-- 分批删除数据
9REPEAT
10    DELETE FROM your_table
11    WHERE time < @six_months_ago
12    LIMIT @batch_size;
13    SET @counter = @counter + 1;
14UNTIL @counter = 0 END REPEAT;

2. 使用 INPLACE ALTER TABLE

对于InnoDB表,可以使用 ALTER TABLE 来删除数据,这通常比 DELETE 更快。然而,此方法要求您能够确定删除的行不会被引用(例如通过外键)。此外,这种方法可能不是所有版本的MySQL都支持。

示例 SQL 语句
1-- 确定半年前的日期
2SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);
3
4-- 创建一个临时表,只包含需要保留的数据
5CREATE TABLE temp_table AS SELECT * FROM your_table WHERE time >= @six_months_ago;
6
7-- 删除原始表
8DROP TABLE your_table;
9
10-- 重命名临时表为原始表的名字
11RENAME TABLE temp_table TO your_table;

3. 使用 TRUNCATE TABLE 和重新插入数据

如果您可以接受删除所有数据并重新插入数据,那么可以使用 TRUNCATE TABLE 来清空整个表,然后只插入最近六个月的数据。这种方法适用于那些可以承受完全清空表的场景。

1-- 确定半年前的日期
2SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);
3
4-- 清空表
5TRUNCATE TABLE your_table;
6
7-- 重新插入最近六个月的数据
8INSERT INTO your_table
9SELECT * FROM your_table
10WHERE time >= @six_months_ago;

注意事项

  • 备份数据:在执行任何大规模删除操作之前,一定要做好数据备份以防万一。
  • 监控性能:在执行删除操作时,应密切监控MySQL服务器的性能指标,如CPU使用率、磁盘I/O等。
  • 禁用外键检查:如果表上有外键约束,可以暂时禁用外键检查。
  • 禁用自动提交:在开始删除操作之前,可以关闭自动提交,然后在删除完成后手动提交事务。

示例 SQL 脚本

以下是一个完整的SQL脚本示例,使用分批删除的方式删除半年前的数据:

1-- 设置变量
2SET @batch_size = 100000; -- 每次删除 10 万条记录
3SET @counter = 0;
4
5-- 确定半年前的日期
6SET @six_months_ago = DATE_SUB(CURDATE(), INTERVAL 6 MONTH);
7
8-- 分批删除数据
9REPEAT
10    DELETE FROM your_table
11    WHERE time < @six_months_ago
12    LIMIT @batch_size;
13    SET @counter = @counter + 1;
14UNTIL @counter = 0 END REPEAT;

总结

选择哪种方法取决于您的具体需求和资源。如果数据量非常大,建议先在一个较小的数据集上测试所选方法的性能,然后再应用到整个表。此外,在执行此类操作时,最好在业务低峰期进行,以减少对应用程序的影响。


看来也没有更好的办法,还是这些老办法。

3、实战

先新建一张copy的表。

注意:新建表的自增索引ID,还是会从1开始的。

CREATE TABLE new_table_name LIKE existing_table_name;

接下来二个方案

1、实时数据不能停的,先改名,把名称互换。等数据插入一波,再启动迁移。主要是为了插入一波后自增索引自动调整。避免冲突

RENAME TABLE temp TO users;

2、实时数据能停的,那么就先停掉。再名称互换,再改动自增索引起点值。这时候其实可以开启插入程序了。

3.1转移

一张表近半年的数据是从390000000差不多开始。那么就好处理了

几千万条数据也是比较快的。

另一张表更大,有近1-2个亿的数据,那么我是2kw-3kw 批量一次,也就半小时。即可完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[DL]深度学习_扩散模型

扩散模型原理 深入浅出扩散模型 一、概念简介 1、Denoising Diffusion Probalistic Models&#xff0c;DDPM 1.1 扩散模型运行原理 首先sample一个都是噪声的图片向量&#xff0c;这个向量的shape和要生成的图像大小相同。通过Denoise过程来一步一步有规律的滤去噪声。Den…

【第69课】Java安全JWT攻防Swagger自动化算法签名密匙Druid未授权

免责声明 本文发布的工具和脚本&#xff0c;仅用作测试和学习研究&#xff0c;禁止用于商业用途&#xff0c;不能保证其合法性&#xff0c;准确性&#xff0c;完整性和有效性&#xff0c;请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0…

【逆向】打开页面403,加密值如何有其它页面内正则提取并更新

一、问题出现 # import requests # url https://www.regulations.gov/search?sortBypostedDate&sortDirectiondesc # response requests.get(url) # print(response.text) 正常页面打开没有自己看到的内容。 F12找到新的地址 import requests# headers { # accep…

使用VRoid Studio二次元建模,创建专属于自己的二次元卡通人物模型,创建完全免费开源且属于自己VRM模型

最终效果 文章目录 最终效果什么是VRoid Studio官网地址下载安装VRoid Studio1、可以去它的官网下载2、steam安装 创建模型配置参数 导出模型使用别人的VRM模型这里我分享几个不错的模型&#xff0c;大家可以自行去下载 完结 什么是VRoid Studio 如果你玩过能捏脸的游戏你就能…

免费体验!快速生成超逼真真人美图的Stable Diffusion模型!

前言 所有的AI设计工具&#xff0c;模型和插件&#xff0c;都已经整理好了&#xff0c;&#x1f447;获取~ 环境安装 1、安装Python 下载地址&#xff1a;https://www.python.org/ftp/python/3.10.6/python-3.10.6-amd64.exe。 备注&#xff1a;把安装目录加入环境变量&…

AI打造独居女性生活漫画Vlog,这份涨粉秘籍不容错过!

在快节奏与高压的现代生活中&#xff0c;独居女性的日常成为了许多人向往的一片宁静之地。她们以独特的方式享受着自我成长与生活的美好&#xff0c;而这些细微却动人的瞬间&#xff0c;正是我们创作爆款Vlog的灵感源泉。 在这个数字化时代&#xff0c;我们用科技捕捉并重新诠释…

一些常见的测试类型及介绍

在刚开始学习软件测试的时候&#xff0c;总是看到很多种测试类型&#xff0c;除了下图软件测试分类外&#xff0c;还有一些常见的测试类型名称。 1.接口测试 接口测试用于检测外部系统与所测系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;通…

Ubuntu下载安装教程|Ubuntu最新长期支持(LTS)版本24.04 LTS下载安装

安装Ubuntu Ubuntu最新长期支持(LTS)版本24.04 LTS Ubuntu 24.04 LTS | 概览 Ubuntu长期支持(LTS)版本&#xff0c;LTS意为“长期支持”&#xff0c;一般为5年。LTS版本将提供免费安全和维护更新至 2029年4月。 Ubuntu 24.04 LTS&#xff08;代号“Noble Numbat”&#xff0c;…

【EI检索稳定】2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)

由悉尼科技大学和西南交通大学联合主办&#xff0c;四川大学、中南大学社会计算研究中心、西南财经大学、武汉理工大学协办的2024年第四届数字化社会与智能系统国际学术会议将于2024年11月22-24日在中国郑州举行。会议主题主要聚焦智能系统在数字化社会中的相关技术和应用发展。…

RM电控RTOS

OS即&#xff08;operating system&#xff09;操作系统&#xff0c;比如我们常用的windows系统&#xff0c;mac系统&#xff0c;android系统&#xff0c;ios系统&#xff0c;linux系统等&#xff0c;都属于操作系统。操作系统的本质是一个特殊的软件&#xff0c;它直接管理硬件…

一文彻底搞懂Transformer - FFNN(前馈神经网络)

Transformer 神经网络&#xff1a; 神经网络&#xff08;Neural Networks&#xff09;是一种模仿生物神经网络的结构和功能的数学或计算模型。它由大量的人工神经元&#xff08;也称为节点或处理单元&#xff09;相互连接而成&#xff0c;这些神经元之间通过带有权重的连接进行…

罗德与施瓦茨(RS)FSW50,FSW85,FSW67信号和频谱分析仪

Rohde & Schwarz FSW50,FSW67,FSW85信号和频谱分析仪 高性能罗德与施瓦茨 (R&S) FSW50 信号和频谱分析仪专为方便、准确和快速而设计。其独特的触摸屏、直观的多视图结果显示和优化的用户指南使 R&S FSW50 分析仪的操作高效便捷。凭借其无与伦比的相位噪声、无与伦…

数学生物学-2-离散时间模型(Discrete Time Models)

上一篇介绍了一个指数增长模型。然而&#xff0c;我们也看到&#xff0c;在现实情况下&#xff0c;细菌培养的增长是在离散的时间&#xff08;在这种情况下是小时&#xff09;进行测量的&#xff0c;种群并没有无限增长&#xff0c;而是趋于以S形曲线趋于平稳&#xff0c;称为“…

[ACL 2024] Revisiting Knowledge Distillation for Autoregressive Language Models

Contents IntroductionMethodRethinking Knowledge Distillation for Autoregressive LMsImproving Knowledge Distillation with Adaptive Teaching Modes ExperimentsReferences Introduction 作者提出 Autoregressive KD with Adaptive Teaching Modes (ATKD)&#xff0c;通…

Go语言开发通过本地数据xdb文件​查询获取IP地址的归属地区及运营商名称

说明&#xff1a; 用本地数据&#xff0c;离线识别ip属地&#xff0c;用于显示用户ip属地&#xff0c;不依赖第三方的api接口&#xff0c;本地数据包解析&#xff0c;解析速度快10微秒级别的查询效率。返回数据固定格式&#xff1a;国家|区域|省份|城市|ISP&#xff0c;例如&a…

c++11(三)

一、可变参数 1、可变参数模板 c语言中的 scanf 和 printf 可以支持我们传入任意个数的参数&#xff0c;原理就是用了参数包。 //可变参数包 template<class ...Args> void Print(Args... args) {} Args&#xff1a;模板参数包 args&#xff1a;函数形参参数包 声明…

检查linux系统中异常进程

1、查看非root运行的进程 [rootbastion-IDC ~]# ps -U root -u root -N 2、查看root运行的进程 [rootbastion-IDC ~]# ps -u root 注意&#xff1a;UID为0的进程&#xff0c;查看该进程所打开的端口和文件 [rootbastion-IDC ~]#ps -ef 查看进程 [rootbastion-IDC ~]# l…

Lesson 77 Terrible toothache

Lesson 77 Terrible toothache 词汇 appointment n. 预约 构成&#xff1a;point v. 指&#xff0c;指向 用法&#xff1a;point to 人 / 物    指着&#xff0c;指向……    point out 指出&#xff08;问题&#xff09; 相关&#xff1a;game point 局点    matc…

statsmodels学习笔记

statsmodels学习笔记 统计模型、假设检验和数据探索。statsmodels是一个python模块&#xff0c;提供了用于估计许多不同统计模型的类和函数&#xff0c;以及用于统计测试和统计数据探索。每个估计器都有一个广泛的结果统计列表。根据现有的统计软件包对结果进行测试&#xff0c…

【C++】深入解析C/C++内存管理:new与delete的使用及原理

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类 本章将分享C为何放弃malloc/free系列&#xff0c;选择新系列new/delete去管理内存。深度探索new/delete的使用及其原理,m…