本文介绍: truncate table在功能上与不带where子句的delete语句相同:二者均删除表中的全部行。但truncate比delete速度快,且使用的系统和事务日志资源少。delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行rollback。1、truncate在各种表上无论是大的还是小的都非常快。如果有rollback命令delte将被撤销,而truncate则不会被撤销。
背景:
根据甲方要求,需要对大数据平台指定表(hive、impala表)的历史数据[2021-01-01至2023-03-29]指定字段进行批量更新,然后把表同步到Oracle。先更新大数据平台上的表,再把更新完成的表同步到Oracle。hive有8张表更新,其中4张大表【分区表】(数据量分别为:1038738976、260958144、25860509、2867005),另外4张小表(几万、二十几万的样子)。4张小表使用kettle直接全量同步到Oracle,另外4张大表数据量很大,使用kettle同步的话,时间也会很久而且不一定能成功,所以我决定在Oracle上直接更新。查看Oracle更新(牵涉7张表,其中4张表数据量少,几万二十几万的样子;3张数据量大),3张生产环境表(表1:136327470;表2:32311563;表3:2757935)高达亿级的数据量,需要更新的数据也有上亿、千万、百万,还需要连表查询。
开始使用update 语句直接更新的时候发现,50分钟都未能更新完成,使用了merge 后,速度有很大提升。
第一种情况:全删全插
1、备份数据
2、删除数据
三种方法:删除表(记录和结构)的语句delete、truncate、drop
drop命令
truncate命令
delete命令
Truncate总结
1、truncate在各种表上无论是大的还是小的都非常快。如果有rollback命令delte将被撤销,而truncate则不会被撤销。
2、truncate是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对truncate使用rollback命令。
3、truncate将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过truncate操作后的表比delete操作后的表要快得多。
3、插入数据
第二种情况:不删除数据直接更新表
方法一:update
方法二:merge into
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。