从MS SQL删除大数据说开去-1

上一篇 / 下一篇  2012-04-01 10:00:39 / 个人分类:数据库

对于数据库中删除数据,你说要注意什么呢?代码怎样写?51Testing软件测试网 |/t,z:FT ~:O.W7` K

  多数同学看到这两个问题,想都不想就说,就一个Delete语句,注意删除的条件不要删除错了就是,有什么好注意的!

!?y zb$c*I;B0

sl#pm-IJ4N0  是的,可以我再问一下,删除动作是会写日志的,你放日志的磁盘够空间吗?51Testing软件测试网(i%r'S/TKR

6Sx/S}N0  本文的内容:51Testing软件测试网r:s4y#J^%lX5D

51Testing软件测试网/L-~d8X4|}

  1、我先举个实际的工作问题;51Testing软件测试网umV6Eo+L'N'e

.Ot&{ d%T2E0  2、整理T-SQL的删除数据的语句和写法;

vzN1K8TY3`051Testing软件测试网{] x#u+B\l)R;~%f

  3、解决这个工作中的问题和效果总结。

!|S2u)PuS"z9?n0

nH fcW JWi0  先举个我实际工作中的事例,我们在这样的一个应用,每天定时收集一些数据写入数据库中,数据库中有一批表(十几个)存放这些数据,由于数据量很大,三个月的单表数据在1亿以上,所以,我们只用表保存90天的数据,用于做什么我们在这里不关心好不好。在每天都有一个Job去删除90天以前的数据。由于这是很早前,我的前辈所做的,现在人已不在这公司了。这些表所有的动作就以下的语句来删除:

W!ul%k4\X.{z0

!~QR @:_%CE051Testing软件测试网 x(h'| J3|&q e,h"FJ.L v

1:  DELETE FROM dbo.S5_BinTest_Detail51Testing软件测试网@d-G,Y9dP
2:         where BinTestID in (SELECT BinTestID51Testing软件测试网iZ*r&k G3U;a
3:             from dbo.S5_BinTest_Info
n w(q(J|-A a-`$g04:             where TS <dateadd(dd,-90,getdate())51Testing软件测试网;Ydx,`8?.y
5:         )51Testing软件测试网-{ J'Qr@6zdD9c0t
6:         and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=0
*R2g;T'v*K1I^@!{07:
^Yl!l(k-w9?#_&C#?08:   DELETE from dbo.S5_BinTest_Info where TS <dateadd(dd,-90,getdate())51Testing软件测试网im3y TbR"Y7lS
9:         and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=0

4s]~2DU(BJ\[6I051Testing软件测试网)vyb/B(\ ^

%KGu}$V#G0  这只是一次只删除一天的数据,也就是日期最早的,90天以前的。昨晚就收到了以下的服务器报警:51Testing软件测试网vs4p5cIc!jvd+A

OM5Qy'@7CJ,}0

  我看到平时服务器上各磁盘的空间使用情况如下,D盘是日志文件所在的盘,平时大概有95G的可用空间;51Testing软件测试网!O\[*i*}e2?;`

  E盘是数据文件存放的盘,平时有170G的可用空间。由于数据每天的新增和删除的量都基本平衡,所以也就没有多大的变化。

y;VZ9O th/M6k0

9h1Ss2_1`k9l0

  现在看到数据库文件已有121G这么大。多个亿级别的表了。51Testing软件测试网o CN o'l {8f+Kt

51Testing软件测试网A6k6N?D0me5\


TAG:

 

评分:0

我来说两句

Open Toolbar