我们有一张包含1.5亿条记录的表格。我们需要清除/删除所有行。由于写入t-logs而删除操作将永远需要,我们无法更改整个数据库的恢复模型。我们测试了truncate table选项。
我们意识到truncate会从表中释放页面,如果我没有错,则可以将它们重用,但不会自动缩小db。因此,如果我们想减小数据库大小,我们真的需要在截断表之后运行shrink db命令。
这是正常程序吗?我们需要小心或意识到什么,或者有更好的选择吗?
答案 0 :(得分:1)
“删除所有行”...不会 DROP TABLE (并重新重新创建一个具有相同架构/索引的空行)? (我个人喜欢“新鲜的开始”;-))
这说TRUNCATE TABLE也很好,是的,如果你想恢复空间,可能需要DBCC SHRINKFILE。
答案 1 :(得分:1)
truncate
正是您正在寻找的。如果您之后需要减小db,请运行收缩。
这个MSDN refernce(如果你说的是T-SQL)比较删除行与截断的幕后。
答案 2 :(得分:0)
使用Truncate Table(以及drop table)要记住的一件事是,如果您有外键引用该表,这将无效。
答案 3 :(得分:0)
根据完整数据库的大小,缩小可能需要一段时间;如果它在较小的块中缩小,我发现它会更快,而不是试图一次性恢复它。
答案 4 :(得分:0)
您有一个正常的解决方案(truncate + shrink db)来删除表中的所有记录。
欧文指出。 TRUNCATE命令在被外键约束引用时不起作用。因此,首先删除约束,截断表并重新创建约束。
如果您担心性能 和 ,这是您系统的常规例程。您可能希望查看将此表移动到其自己的数据文件,然后仅针对目标数据文件运行收缩!
答案 5 :(得分:0)
正如所指出的,如果你不能使用truncate或drop
SELECT 1
WHILE @@ROWCOUNT <> 0
DELETE TOP (100000) MyTable