项目情况是这样的,数据库中有一张计费表,这张表是随着时间无限增长的,数据会越来越多,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数据库删除千万条数据的操作方案相关推荐

  1. mysql数据库删除一条数据后还想让新增数据从空缺id处开始

    方法1: truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增的字段 方法2: delete from 你的表名 dbcc checkident(你的表名,reseed ...

  2. Mysql数据库导入千万条数据

    第一步 创建数据库 sql语句: CREATE DATABASE aaaa 第二步 创建表 sql语句: CREATE TABLE usertb( id serial, uname varchar(2 ...

  3. mysql数据库删除重复的数据只保留一条

    问题引入 假设一个场景,一张用户表,包含 3 个字段:id,identity_id,name. 现在身份证号 identity_id 和姓名 name 有很多重复的数据,需要删除多余数据只保留一条有效 ...

  4. Mysql中一千万条数据怎么快速查询

    文章来源: 学习通http://www.bdgxy.com/ 目录 普通分页查询 如何优化 偏移量大 采用id限定方式 优化数据量大问题 普通分页查询 当我们在日常工作中遇到大数据查询的时候,第一反应 ...

  5. MySQL数据库C接口的数据查询操作示例

    MySQL数据库C接口的数据查询操作示例 命令行操作 (1)建库建表(已有则不用) 连接MySQL服务器,并登录之.选择某个数据库.假设用户在这个数据库下已有一个表了. (2)查询所有数据的方法 SE ...

  6. python+mysql:实现一千万条数据插入数据库

    实现思路如下: 复制原数据库moviedb至newmoviedb 设置max_allowed_packet,以保证一条insert语句可以插入足够多的元组 用python生成一条一次插入10000个元 ...

  7. mysql数据库删除重复的数据保留一条

    1.问题引入 假设一个场景,一张用户表,包含3个字段.id,identity_id,name.现在身份证号identity_id和姓名name有很多重复的数据,需要删除只保留一条有效数据. 2.模拟环 ...

  8. mysql批量删除5000条数据_mysql批量删除大量数据

    mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM s ...

  9. 你向 Mysql 数据库插入 100w 条数据用了多久?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 目录 1.多线程插入(单表) 2.多线程插入(多表) 3.预处理S ...

最新文章

  1. 【 C 】在单链表中插入一个新节点的尝试(一)
  2. sqlmap绕过d盾_Waf功能、分类与绕过
  3. 电脑显示链接网络正常但是不能上网,用某些软件会提示系统丢失libeay32.dll
  4. [转载]常用内部排序算法--用VB6实现
  5. 金融级分布式数据库架构设计要点
  6. 【英语学习】【Level 07】U07 Stories of my Life L5 I shouldn't have said that
  7. asp.net jquery.Ajax() 方法调用后台方法
  8. asp.net分页方法
  9. ES aggr terms nested study
  10. 如何下载城通网盘的东西?
  11. linux-arm下如何开启tftp传输,linux-arm间tftp命令的安装、使用
  12. ping-pong buffer
  13. CF Stressful training优先队列加二分搜答案
  14. RabbitMQ的安装与配置
  15. iOS -- 使用蒲公英进行内测
  16. 【机房收费个人版】SqlHelper
  17. 用十种编程需语言说新年快乐_整理新年手机和PC的10种方法
  18. python 3.10不支持torch,因而无法安装和使用cnocr
  19. MATLAB学习笔记:非齐次线性方程组的求解
  20. golang 中 signal 包的 Notify 函数用法介绍

热门文章

  1. 吹气压力传感器US6310 US6330调试
  2. 手把手教你使用pytorch实现双向LSTM机器翻译
  3. 电网管理信息系统安全运行需求分析
  4. 数字证书明文_明文数字证书风险
  5. Openjudge:字符串的最大跨距
  6. peewee操作mysql_peewee基本使用
  7. C 关于中文汉字字符串
  8. 张宇基础30讲 第15讲
  9. linux服务安全与监控二
  10. Pascal基础(七)-Pascal泛型