mysql数据库删除千万条数据的操作方案

2024-09-03 00:32

本文主要是介绍mysql数据库删除千万条数据的操作方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   项目情况是这样的,数据库中有一张计费表,这张表是随着时间无限增长的,数据会越来越多,count一下数据共有8千万条,而现在需要删除2019年之前所有的数据,大概7千多万条。表中有索引。

我直接使用

DELETE FROM table_name WHERE recordtime < "2019 01-01 00:00:00"

  这相当于愚蠢,因为直到连接断开,操作结果都没有返回,我估计是需要很多时间,但是愚蠢的我并不知道这个时间会大好几天这么长(我算了一下),当时删除两条数据花了0.05s,那删除7千万条需要多少小时呢将近500小时,这种估算的时间还算少的。因为删除数据的时候还要更新索引。时间会更多。

 delete语句删除数据的过程是一条一条删除的,并且同时将该行的删除操作作为十五记录在日志中保存以便进行回滚操作

这边我需要介绍另一种方案:

我需要删除2019年之前的数据,也就是需要保留以下部分数据的,

方案如下 :

1、创建新表backup和老表oldtable一样的表结果,具体操作: CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2;//筛选条件是选不出数据的

2、提取旧表中你需要的数据并插入新表, 具体操作:INSERT INTO 新表 SELECT * FROM 旧表 WHERE 查询条件

3、禁用外键为初始化旧表做准备SET foreign_key_checks = 0;(如果旧表中有外键,最好禁用下,否则truncate会提示,)

4、清空旧表中所有的数据: TRUNCATE TABLE 旧表;

5、将新表中数据全部在导入旧表

6、开启外键 set foreign_key_checks = 1;

 

上面的方案执行起来大概需要十分钟。

 TRANCATE操作:一次性从表中删除所有数据并不把单独的删除记录记入日志保存,删除的记录不可恢复。

当表被truncate后,这个表和索引所占用的空间会恢复到初始大小,而delete操作不会减少表或索引所占用的空间

 

这边介绍一下delete,drop和truncate的使用场景

速度:drop>truncate>delete

如果想删除表,drop

如果想保留表而将所有数据删除,如果和事务无关,用truncate

如果和事务有关,或者想触发trigger,用delete。当然删除部分数据用delete

 

这篇关于mysql数据库删除千万条数据的操作方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131514

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3