SQL2005删除大数据
客户端连接也变的异常慢,并且公司的数据库所占空间大,因为是软件是深圳一家软件提供的,只有服务器在本地,而和这个公司沟通异常困难,所以只有自立更生了。
经过简单查看
create table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20),
index_size varchar(20), unused varchar(20))
exec sp_MSforeachtable "insert into #t exec sp_spaceused '?'"
select * from #t order by name
drop table #t
发现最大的一个表A,居然有1亿6千万数据,就是它了,并且这个表还在不停增长中,每天大概270-300万行,非常恐怖,这也是我接触过最大数据了,之前应用过的最多也就3千万,跟这比,有点小巫见大巫了,呵呵。
按上头意思,把不必要的删了,然后开始删,最开始是按日期,
between and 这样太慢了,删除一个月数据,都要大半天,很费时间,后来改用ID,根据时间查到某月最大ID是B,删除<B,速度稍微快一点,还是慢,在这里比较笨,删除了近半数据后,查查,也只是少了8千万,还有9千万,还要再删,这时再也不想像上面那样操作了。开始寻找新办法。
发现SQL2005 BCP可以导出导入数据,并且性能非常高,在本机试了一下,不错,每秒 51202.31 行,速度太给力了。那就把需要的数据导出来,然后truncate table,再将数据导回。按照这个思路。
导出-->
EXEC master..xp_cmdshell'BCP "SELECT * FROMXXX.dbo.A whereid>117634587" queryout e:\A-10.1.txt -c -S".,20001" -U"jtx" -P"Jtx"'
--已复制 49312222 行。
--总时钟时间(毫秒) : 942750 平均值: (每秒 52306.79 行。)
导入-->
EXEC master..xp_cmdshell 'BCP XXX.dbo.Ain E:\A-10.1.txt -c -T'