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

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

平时的日志文件几百M。

*j dk9p@.b4QO%k#@0

  这报警是D盘小于40G,那就是说日志文件增长了45G以上,那时也正好是删除数据的Job在执行。在我检查这些删除动作的语句时,发现了问题,就是没有考虑删除大数据时日志增长与磁盘空间的关系。这样下去,可能那一次就挂了。

jb7t~]5hW0

  再说说删除数据的方式:

)sdL(e[ V$N#Je0

  对于删除数据,T-SQL提供了两个从表中删除数据行的语句:Delete和TRUNCATE.

h n y;\xU8F$C Kc'z+m0

  DELETE 语句是标准的SQL语句,它用于根据指定的谓词(条件)从表中删除数据。这个标准的语句只有两个子句:用于指定目标表名的FROM子句和用于指定谓调整条件的WHERE子句。只有能让谓词条件计算结果为TRUE的行才会被删除。

1[!Kqja R f7d4^0

  例如:

(m9ybJ#P$fQ0

U._2c2srp^/X0
DELETE from dbo.S5_BinTest_Info where TS <dateadd(dd,-90,getdate());

C2dV [(i'AY051Testing软件测试网!C | m2jQ

  这是删除表S5_BinTest_Info中时间字段TS早于90天的数据。51Testing软件测试网[BF m1w

  DELETE语句采用的是完整模式的日志处理,当删除大量数据时,可能会花费大量的时间还有需要大量的日志存放空间。

mR YWE j:JQG;{`I0

  TRUNCATE语句不是标准的SQL语句,它用于删除表中所有的行。与DELETE语句不同,TRUNCATE不需要加条件,如:

!bn_7t,C'|N0

51Testing软件测试网]K#PaU#[3s$z-O F

TRUNCATE TABLE dbo.S5_BinTest_Info;

`ORR J0

b1U9rT)Jtd0

  和DELETE语句相比,TRUNCATE具有以最小模式记录日志和优点。和DELETE语句的完整模式在性能上有巨大的差异。TRUNCATE的速度最快。当表中有标识列时,DELETE不会改变标识列的值,TRUNCATE则会重置为最初的种子值。

@L7J)r0OI^Bo2]&C0

TAG:

 

评分:0

我来说两句

Open Toolbar