您正在使用 IPV4 [18.97.9.168] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]保护绿色环境,构建和谐社会      

【腾讯云】2核2G云服务器新老同享 99元/年,续费同价,云服务器3年机/5年机限时抢购,低至 2.5折      
[公益] 地球是我家,绿化靠大家      
2025年 春 节 005
2025年 高 考 134
2025年 春 节 005
2026年 元 旦 342
 
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门
使用 SQL 快速删除数百万行数据的实践记录
内容摘要: 根据我们所熟知的使用SQL删除数据有三个方式:1:DELETE,可以添加where条件,速度较慢,锁表2:truncate,会删除表所有数据,速度快3:drop,删除数据以及表结构,慎用实践【1】对于truncate和drop不在本次的讨论范围,虽然这俩种方式很快,但是破坏性太大。注意日常开发中所有删除操作必须添加条件。【2】对于几十万以上数据的删除不建议使......
根据我们所熟知的使用SQL删除数据有三个方式:

1:DELETE,可以添加where条件,速度较慢,锁表

2:truncate,会删除表所有数据,速度快

3:drop,删除数据以及表结构,慎用

实践

【1】对于truncate和drop不在本次的讨论范围,虽然这俩种方式很快,但是破坏性太大。注意日常开发中所有删除操作必须添加条件。

【2】对于几十万以上数据的删除不建议使用DELETEFROMTABLEWHERE的方式,该操作非常耗时,效率很差。

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

createtabletable_name_temp

select*fromsource_tablewhereXX=?

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

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

【5】具体操作步骤

--复制表结构

CREATETABLEtableB(LIKEtableA);

--插入筛选数据

INSERTintotableBSELECT*fromtableAwhereXXX=?;

--重命名,替换

renametabletableAtotableC;

renametabletableBtotableA;

--删除旧表

DROPTABLEtableC;

复制免费讲解AI专家

--复制表结构

CREATETABLEtableB(LIKEtableA);

--插入筛选数据

INSERTintotableBSELECT*fromtableAwhereXXX=?;

--重命名,替换

renametabletableAtotableC;

renametabletableBtotableA;

--删除旧表

DROPTABLEtableC;

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

【6】通过delete删除上百万的数据耗时不清楚具体耗时,反正自己等待了十多钟都没有结果,通过select*fromsys.sessionWHEREconn_id!=connection_id();

查询看一直在执行。通过上面的方式500万的数据不到1分钟,还是比较快的。

【7】小技巧,如果你的大表有递增的ID,删除的或者保留数据的能够以ID作为划分的那么select的条件可以通过这里进行优化,那么操作效率会更快。

【8】如果是oracle,那么还可以使用altertable…move来更改存储行的表空间

altertabletableNamemoveincludingrowswhereXXX=?

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:Linux系统每日定时备份mysql数据的方法步骤

 

下一篇:MySQL视图中用变量实现自动加入序号功能

发布日期:2024/10/18
手机扫二维码直达本页
发布时间:23:21:13
点  击:28
录  入:齐天大圣
相关文章
Baidu
YiJiaCMS 7.5.5 build241121(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,创宇云安全提供加速防护
运行时间载入中.....
知道创宇云安全