Cod*_*ick 14 sql sql-server-2005
我们遇到了一个有点奇怪的情况.基本上,我们的一个数据库中有两个表格,这些表格是我们不需要或不关心的大量日志信息.部分原因是我们的磁盘空间不足.
我正在试图清理表格,但这是永远的(在周末运行之后仍有57,000,000条记录......而这只是第一张桌子!)
只是使用删除表是永远占用并占用驱动器空间(我相信因为事务日志.)现在我正在使用while循环一次删除记录X,同时玩X来确定实际上最快的.例如,X = 1000需要3秒,而X = 100,000需要26秒......其中数学运算稍快一些.
但问题是,是否有更好的方法?
(完成此操作后,要运行SQL代理作业,请每天清理一次表...但需要先清除它.)
Joe*_*ips 20
在删除之前 TRUNCATE表或禁用索引
TRUNCATE TABLE [tablename]
Run Code Online (Sandbox Code Playgroud)
截断将删除表中的所有记录,而不单独记录每个删除.
要添加到其他响应,如果要保留过去一天的数据(或过去一个月或一年或其他),然后将其保存,请执行TRUNCATE TABLE,然后将其重新插入原始表:
SELECT
*
INTO
tmp_My_Table
FROM
My_Table
WHERE
<Some_Criteria>
TRUNCATE TABLE My_Table
INSERT INTO My_Table SELECT * FROM tmp_My_Table
Run Code Online (Sandbox Code Playgroud)
接下来要做的就是问问自己,如果没有人关心它,你为什么要将所有这些信息都插入到日志中.如果你真的根本不需要它,那么关闭源头的日志记录.