对于数据库中删除数据,你说要注意什么呢?代码怎样写?
多数同学看到这两个问题,想都不想就说,就一个Delete语句,注意删除的条件不要删除错了就是,有什么好注意的!
是的,可以我再问一下,删除动作是会写日志的,你放日志的磁盘够空间吗?
本文的内容:
1、我先举个实际的工作问题;
2、整理T-SQL的删除数据的语句和写法;
3、解决这个工作中的问题和效果总结。
先举个我实际工作中的事例,我们在这样的一个应用,每天定时收集一些数据写入数据库中,数据库中有一批表(十几个)存放这些数据,由于数据量很大,三个月的单表数据在1亿以上,所以,我们只用表保存90天的数据,用于做什么我们在这里不关心好不好。在每天都有一个Job去删除90天以前的数据。由于这是很早前,我的前辈所做的,现在人已不在这公司了。这些表所有的动作就以下的语句来删除:
1: DELETE FROM dbo.S5_BinTest_Detail 2: where BinTestID in (SELECT BinTestID 3: from dbo.S5_BinTest_Info 4: where TS <dateadd(dd,-90,getdate()) 5: ) 6: and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=0 7: 8: DELETE from dbo.S5_BinTest_Info where TS <dateadd(dd,-90,getdate()) 9: and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=0 |
这只是一次只删除一天的数据,也就是日期最早的,90天以前的。昨晚就收到了以下的服务器报警:
我看到平时服务器上各磁盘的空间使用情况如下,D盘是日志文件所在的盘,平时大概有95G的可用空间;
E盘是数据文件存放的盘,平时有170G的可用空间。由于数据每天的新增和删除的量都基本平衡,所以也就没有多大的变化。
现在看到数据库文件已有121G这么大。多个亿级别的表了。