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

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

对于数据库中删除数据,你说要注意什么呢?代码怎样写?

D~0s-zp*}$h0  多数同学看到这两个问题,想都不想就说,就一个Delete语句,注意删除的条件不要删除错了就是,有什么好注意的!51Testing软件测试网S:s_x h"y4?

51Testing软件测试网 x0~Q~%\'A9t"~)a

  是的,可以我再问一下,删除动作是会写日志的,你放日志的磁盘够空间吗?51Testing软件测试网k-IHFn)RN(V uF|

51Testing软件测试网/dQ#z"s8]`X.L%]

  本文的内容:

2SM7R n}051Testing软件测试网Q \J+}%So'u

  1、我先举个实际的工作问题;51Testing软件测试网i9x vL"j P

t%_ h7o7Wb0  2、整理T-SQL的删除数据的语句和写法;

9Vz ^Y%y"@8r[\U0

s$I;LF` E0  3、解决这个工作中的问题和效果总结。

u]/~%Z?X:A C+e3r0

6vt;Ok*U8`^ PW0  先举个我实际工作中的事例,我们在这样的一个应用,每天定时收集一些数据写入数据库中,数据库中有一批表(十几个)存放这些数据,由于数据量很大,三个月的单表数据在1亿以上,所以,我们只用表保存90天的数据,用于做什么我们在这里不关心好不好。在每天都有一个Job去删除90天以前的数据。由于这是很早前,我的前辈所做的,现在人已不在这公司了。这些表所有的动作就以下的语句来删除:51Testing软件测试网ZRj(T.C ar4T

&C:|Z.{0?r p051Testing软件测试网+Q+cur^4?:F d)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#Ae z c/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

r Of t\2x0

  现在看到数据库文件已有121G这么大。多个亿级别的表了。

6v nK Z5cY0D A(R0

yq2O,} XRJMVG0

TAG:

 

评分:0

我来说两句

Open Toolbar