从MS SQL删除大数据说开去-1
上一篇 /
下一篇 2012-04-01 10:00:39
/ 个人分类:数据库
对于
数据库中删除数据,你说要注意什么呢?代码怎样写?
D~0s-zp*}$h0 多数同学看到这两个问题,想都不想就说,就一个Delete语句,注意删除的条件不要删除错了就是,有什么好注意的!51Testing软件测试网S:s_xh"y4?
51Testing软件测试网x0~Q~%\'A9t"~)a 是的,可以我再问一下,删除动作是会写日志的,你放日志的磁盘够空间吗?51Testing软件测试网k-IHFn)RN(V uF|
51Testing软件测试网/dQ#z"s8]`X.L%] 本文的内容:
2SM7Rn}051Testing软件测试网Q\J+}%So'u 1、我先举个实际的工作问题;51Testing软件测试网i9x
vL"j P
t%_ h7o7Wb0 2、整理T-SQL的删除数据的语句和写法;
9Vz^Y%y"@8r[\U0s$I;LF`
E0 3、解决这个工作中的问题和效果总结。
u]/~%Z? X:A C+e3r06vt;Ok*U8`^PW0 先举个我实际工作中的事例,我们在这样的一个应用,每天定时收集一些数据写入数据库中,数据库中有一批表(十几个)存放这些数据,由于数据量很大,三个月的单表数据在1亿以上,所以,我们只用表保存90天的数据,用于做什么我们在这里不关心好不好。在每天都有一个Job去删除90天以前的数据。由于这是很早前,我的前辈所做的,现在人已不在这公司了。这些表所有的动作就以下的语句来删除:51Testing软件测试网Z Rj(T.C ar4T
&C:|Z.{0?r p051Testing软件测试网+Q+cur^4?:Fd)o
1: DELETE FROM dbo.S5_BinTest_Detail51Testing软件测试网e+uZt&i 2: where BinTestID in (SELECT BinTestID | Q0CGh
F o]_a03: from dbo.S5_BinTest_Info N7HM2CU'j"h']0V~04: where TS <dateadd(dd,-90,getdate()) 0e3d!VW+ymO05: )51Testing软件测试网{+{!}ol!B 6: and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=051Testing软件测试网 v0^8Haw 7:51Testing软件测试网+T|0S:Aa 8: DELETE from dbo.S5_BinTest_Info where TS <dateadd(dd,-90,getdate())51Testing软件测试网5A$su ZR0].M 9: and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=0 |
xV4n,EV#Aezc/b"D051Testing软件测试网A1z
I!U}h1Tr-{ Z2Drd
51Testing软件测试网5hz+`W1u6c 这只是一次只删除一天的数据,也就是日期最早的,90天以前的。昨晚就收到了以下的服务器报警:
J)X:ZC~:p.t3R
v0
KJ@Rl"Oi*@$C~0 我看到平时服务器上各磁盘的空间使用情况如下,D盘是日志文件所在的盘,平时大概有95G的可用空间;51Testing软件测试网1Z2[;ckuC
E盘是数据文件存放的盘,平时有170G的可用空间。由于数据每天的新增和删除的量都基本平衡,所以也就没有多大的变化。51Testing软件测试网.Q5u1I`H
rOft\2x0 现在看到数据库文件已有121G这么大。多个亿级别的表了。
6v nK Z5cY0DA(R0
yq2O,}XRJMVG0
收藏
举报
TAG: