mysql数据库删除千万条数据的操作方案,直接delete会很久

在线上有一张表很大,积累了几年的消费数据,现在需要把这张表几年前的数据给清掉,数据量将近1亿,直接按年份将其中的数据delete,你会发现删了几小时都没有返回。这是因为每执行一次delete,需要同时将该行的删除操作记录作为事务记录在日志中保存以便进行回滚。

? ?最终采用的方案是:

? ? (1)抽取需要保留的数据到备份表中,

? ? (2)truncate旧表

? ? (3)备份表中的数据再插入truncate表

我的执行实操如下:

CREATE TABLE charging_record_old SELECT * FROM charging_record WHERE 1=2;

INSERT INTO charging_record_old SELECT * FROM charging_record cr WHERE cr.recordtime > "2019-01-01 00:01:00";

TRUNCATE TABLE charging_record;
SET foreign_key_checks = 0;
INSERT INTO charging_record SELECT * FROM charging_record_old;
实际只用了十几分钟

这边说一下truncate操作:truncate操作时隐式提交,不能回滚,也就不记录在日志文件中。

原文地址:https://blog.51cto.com/14471175/2433741

时间: 2024-07-29 15:39:26

mysql数据库删除千万条数据的操作方案,直接delete会很久的相关文章

python连接mysql循环插入千万条数据脚本

之前都是在mysql的存储过程中插入数据,毕竟mysql语法函数有限,很多都有限制.突然想到学了python正好可以练练手. 首先需要安装pymysql模块包(模块包安装请自行百度) 1 #encoding:utf-8 2 import pymysql 3 import time 4 import random 5 #连接mysql 6 db = pymysql.connect('14.29.249.74','kx_admin','Yjh7yC0L7L1G1k6qXKwb','ilock') 7

如何在mysql数据库生成百万条数据来测试页面加载速度

1.首先复制一条sql 在复制前,需要确定该记录是否有主键 若无,则代码非常简单, insert into gl_energy_meter_data SELECT * from gl_energy_meter_data where dosage="12432"; 复制的表名↑                                              粘贴的表名↑                        ↑ 某个字段的值最好唯一 若有主键,一般是ID,则需要随机生成

随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据

package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Random; import com.google.gson.Gson; import com.swift.jztk.bean.Result

MySQL数据库如何解决大数据量存储问题

利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开关量历史数据表,这两张表字段设计的很简单(OrderNo,Value,DataTime).基本上每张表每天可以增加几千万条数据,我想问如何存储数据才能不影响检索速度呢?需不需要换oracle数据库呢?因为我是数据库方面的新手,希望可以说的详细一点,万分感谢!!?-0-#暂时可以先考虑用infobri

MySQL学习笔记之五 有关数据表操作

MySQL在创建表的时候,创建一个.frm文件保存表和列定义.索引存储在一个有.MYI(MYindex)扩展名的文件并且数据存储在有.MYD(MYData)扩展名的文件中.   一.用SHOW/ DESCRIBE语句显示数据表的信息 语法: SHOW TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM

mysql数据库的优化、恢复等操作

1.当你的自增id主键很大时,你想让id重新到1开始自增                    请输入: truncate table 表名; 2.当你的数据库损坏时,你别慌先试试这条命令是否可以帮助你      请输入: repair table 表1,表2- 3.当你的数据表中含有varchar.text等并进行多次删除添加等操作, 会产生好多碎片空间,这回浪费资源,需要进行数据表的优化, 则可以重获碎片空间                                          

MySQL数据库使用mysqldump导出数据详解

mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数据库使用mysqldump导出数据详解,需要的朋友一起学习吧 mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所 需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可

mysql update修改多条数据

通常情况下,我们会使用以下SQL语句来更新字段值: 复制代码代码如下: UPDATE mytable SET myfield='value' WHERE other_field='other_value'; 但是,如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?举个例子,我的博客有三个分类目录(免费资源.教程指南.橱窗展示),这些分类目录的信息存储在数据库表categories中,并且设置了显示顺序字段 display_order,每个分类占一行记录.如果我想重新编排这些

php+mysqli预处理技术实现添加、修改及删除多条数据的方法

本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户,按常规思路,就是向数据库发送100个执行请求,此时,按照 mysql 数据库的工作原理,它需要对每一条执行语句进行编译(这里就有100次).所以,这里的效率是非常低的. 预处理(预编译)技术的作用,就是减少编译的次数和时间,以提高效果.通过一个案例来说明,预处理(预编译)技术是如何做到的(好吧,先