在实时数据库上删除超过17亿行的未编制索引的表(SQL Admin Nightmare)

Pat*_*k S 2 database sql-server bigdata

我们公司最近的一名员工有一个存储过程已经失控,导致大量插入到他的调试表中.该表没有索引,现在接近17亿行,占用的空间太大,备份不再适合备份驱动器(备份现在接近250GB).

我还没有真正看到过这样的内容,所以我在这里寻求MSSQL专家的建议.

我知道我可以蚕食桌子,但是没有索引,DELETE FROM [TABLE] WHERE ID IN (SELECT TOP 10000 [ID] FROM [TABLE])几乎锁定服务器搜索它们.

我也不希望我的日志文件变得庞大,目前它在1TB硬盘上的容量为480GB.如果我删除此表,我是否可以将其缩小?(我的恢复模式很简单)

我们可以索引表中的id字段,尽管我们每天只有大约9小时的停机时间,而在工作时间我们无法锁定数据库.

只是在这里寻找建议,并指出正确的方向.

谢谢.

Tan*_*ner 7

你可能想考虑一下 TRUNCATE

MSDN参考:http://technet.microsoft.com/en-us/library/aa260621(v = sql.80).aspx

从表中删除所有行而不记录单个行删除.

句法:

TRUNCATE TABLE [YOUR_TABLE]
Run Code Online (Sandbox Code Playgroud)

正如@Rahul在评论中建议的那样,DROP TABLE [YOUR_TABLE]如果您不再计划使用相关表格,也可以使用.该TRUNCATE选项只是清空表格,但如果您想继续使用它,请将其留在原位.

关于空间问题,这两项操作都会比较快,空间也会被收回,但不会立即发生.使用时TRUNCATE,仍然必须删除数据,但SQL Server将简单地释放表使用的数据页,并使用后台进程实际执行后续清理.

这篇文章应该提供一些有用的信息.