前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 SQL 快速删除数百万行数据

使用 SQL 快速删除数百万行数据

原创
作者头像
奇怪的Java
发布2023-11-13 01:11:45
2.8K0
发布2023-11-13 01:11:45
举报
文章被收录于专栏:随心写Java

1、使用批量删除

一次性删除大量数据可以减少数据库的I/O操作次数,提高删除性能。在SQL中,可以使用DELETE FROM table_name WHERE condition语句进行批量删除。

例如

代码语言:sql
复制
DELETE FROM table_name WHERE condition LIMIT 2000000;

注意:对于几十万以上数据的删除不建议使用DELETE FROM TABLE WHERE的方式,该操作非常耗时,效率很差。

2、使用TRUNCATE TABLE语句

TRUNCATE TABLE语句是一种删除表中所有行的高效方法。与DELETE语句不同,TRUNCATE TABLE不记录日志和触发器,并且不会逐行删除数据。相反,它将表截断为零行并释放存储空间。

代码语言:sql
复制
TRUNCATE TABLE table_name;

注意:TRUNCATE破坏性较大,不推荐使用

3、禁用日志和约束

禁用日志和约束可以大大提高删除大量数据的速度,因为这些操作会消耗大量的系统资源。可以通过设置数据库的一些参数来实现禁用日志和约束的目的。 禁用日志:可以通过设置数据库参数binlog_format为ROW或者设置session的sql_log_bin参数为0来禁用二进制日志记录。另外,可以暂时禁用慢查询日志和错误日志。

禁用约束:可以通过使用以下语句禁用外键约束、唯一约束和触发器:

代码语言:sql
复制
  SET FOREIGN_KEY_CHECKS = 0;
  SET UNIQUE_CHECKS = 0;
  SET TRIGGER_CHECKS = 0;

4、在低峰时段执行删除操作

在数据库负载较低的时间段执行删除操作可以减少对系统性能的影响,从而提高删除速度。通常,数据库的低峰时段是在使用量较少的凌晨或周末。 使用计划任务(cron job)或延时执行删除操作可以在低峰时段自动执行

5、使用 create-table-as-select (CTAS)

对于大批量数据的删除需求实现可以通过Create-Table-as-Select方式处理,在表中插入行比删除它们更快。 使用 create-table-as-select (CTAS) 将数据加载到新表中的速度更快。

代码语言:sql
复制
create table table_name_temp
select * from source_table where XXXX = ?

通过CTAS将不予删除的数据保留到一个临时表中,然后再通过SWAP的方式将临时表作为原表,通过这种方式完成大批量数据删除

6、5步骤改进

上面的建表方式新表是不会复制原表的索引结构的,如果这个是一个大表那么后面单独加索引也是一个问题。建议使用 CREATE TABLE XXX (LIKE XXX);方式建表,这个会复制相关的索引结构数据

代码语言:sql
复制
-- 复制表结构 
CREATE  TABLE  tableB   (LIKE tableA);
-- 插入筛选数据
INSERT into  tableB    SELECT *  from tableA  where XXX = ?;
-- 重命名,替换
rename  table  tableA to tableC;
rename  table  tableB to tableA;  
-- 删除旧表  
DROP TABLE tableC;

注意:其中俩次rename可以先drop然后一次的rename,但是考虑到数据安全,毕竟是大数量数据删除,还是多操作一步,替换后自己检查下,然后再删除旧表,较为稳妥。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、使用批量删除
  • 2、使用TRUNCATE TABLE语句
  • 3、禁用日志和约束
  • 4、在低峰时段执行删除操作
  • 5、使用 create-table-as-select (CTAS)
  • 6、5步骤改进
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档