truncate table前保留资料的妙招

当我们有大量删除table资料的需求时,如果傻傻的用delete会发现执行得非常之慢,一两百万笔资料大概就要执行个半小时。

这时我们就可以利用truncate的DDL语句来做到大量删除资料的效果:

truncate table 'YOUR_TABLE_NAME'

执行这句后,整张table的资料会在弹指之间直接被清空。但我们通常没有要清的这么乾净,还是有需要保留的资料怎么办?

很直觉地,我们会想到可以建一张column都一样table来暂存要保留的资料,在truncate完本尊后insert回去就搞定了~

到这边就是我写这边文章最想分享的地方了,因为当我们要建立table的时候,会很麻烦地要把各个column定义出来:

create table YOUR_TABLE_NAME(    NAME varchar(10),    AMOUNT int,    FLAG bit,    ...)

是不是很麻烦,就算透过各家DB的UI工具去产生table create sql,那也是要去複製出来搞一搞?怎么样这套做法都得多搞一个步骤出来去定义table,太麻烦了。

这时候就有个很讚的语法,通常会搭配temperary table服用:

-- sql server syntaxselect * into #YOUR_TABLE_NAME from YOUR_TABLE_NAME where ...

就这样!搞定了。透过这个语法我们就做到了保留资料跟创建table,超舒服。当然因为我现在工作上是用sql server,可以直接套用在temp table,或许其他DB应该也会有类似的语法可用。

或者也可以使用以下语法:

create table TEMP_TABLE_NAME as (select * from YOUR_TABLE_NAME)

也可以做到建立table的同时複製资料,并不用再定义繁琐的column设定。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章