【mysql 删除大表中的数据】如何删除100G以上的大表中的数据 您所在的位置:网站首页 sql怎么删除一张表 【mysql 删除大表中的数据】如何删除100G以上的大表中的数据

【mysql 删除大表中的数据】如何删除100G以上的大表中的数据

2024-07-07 09:46| 来源: 网络整理| 查看: 265

一、如何删除较大的表

两个删除策略:  1、慢的方法是写脚本定时任务带where的delete语句 慢慢删除 范围定小一点 锁的时间很短 客户端无感;  2、快的方法就是找个业务空的时候 新建表 程序往新表中插入 然后把老表中需要的记录让新表中插入;

举个例子说明:

情景:数据库中有一张表t_aa , 表中数据包含了2年的数据,将近3000万条记录,目前需要清除一年的历史数据。

有人说很简单,直接delete+where条件就可以了,比如  delete from t_aa  where CRE_TIME  show create table student\G;     *************************** 1. row ***************************     Table: student     Create Table: CREATE TABLE `student` (     `id` int(4) NOT NULL AUTO_INCREMENT,     `name` char(20) NOT NULL,     `age` tinyint(2) NOT NULL DEFAULT '0',     `dept` varchar(16) DEFAULT NULL,     PRIMARY KEY (`id`),     KEY `index_name` (`name`)     ) ENGINE=MyISAM DEFAULT CHARSET=utf8     1 row in set (0.00 sec)

    ERROR:      No query specified

经过验证,索引的使用对查询和插入速度有以下影响:

查询时,使用带有索引的列可以明显提高查询速度;插入时,如果插入的列有索引,插入速度会减慢。

在以后创建表格时,尽量保证将主要的数据都插入之后,再添加索引,避免在添加索引之后进行数据插入,以保证效率最高。

3、插入近一年的数据,放入新表 t_aa_copy

INSERT INTO  t_aa_copy SELECT * FROM t_aa WHERE CRE_TIME >= '2018-01-16 00:00:00';

4、重命名原始表,并给新表命名为原始表的原始表名 RENAME TABLE t_aa TO  t_aa_old; RENAME TABLE t_aa_copy TO  t_aa;

不出问题的情况: 修改参数重启服务(5分钟)+ 新建t_aa_copy表(2分钟) + 向新表插入数据(10分钟)+ 重命名(2分钟)=约20分钟

出现问题需还原的情况: 修改参数重启服务(5分钟)+ 新建t_aa_copy表(2分钟) + 向新表插入数据(10分钟,经过测试3分钟1000万条数据)+ 重命名(2分钟)+ 重命名(2分钟)=约25分钟

-----------------------------------------------

二、可能会出现的问题:

1、报错:ERROR 1206 (HY000): The total number of locks exceeds the lock table size

https://www.cnblogs.com/zhaobolu/p/3641020.html

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有