sql - 我应该在删除表之前截断表以避免日志记录开销吗?

标签 sql sql-server sql-server-2008

据我了解,使用TRUNCATE 是一种最小记录操作,不会记录每条记录的删除,而DROP 会记录删除操作。

因此,可以安全地假设,如果我想删除一个相对较大的表,并且希望尽快完成并且日志记录开销尽可能小,我应该在之前 TRUNCATE TABLE删除表?在 RECOVERY SIMPLE 中执行此操作有什么不同吗?

我应该注意,这需要以自动化方式(在预先编写的脚本内)进行,因为这将部署到客户端数据库,其中停机时间和日志文件增长都可能成为问题。

最佳答案

虽然 TRUNCATE 不记录单个行,但它会记录页面/范围。这就是为什么你可以回滚截断(很多人不知道)。我的猜测是,如果你只是截断然后删除它实际上会比单独删除慢。如果您在两者之间提交,也许不会,但这也取决于日志事件、恢复模型、何时到达检查点等。

为什么速度在这里很重要?如果您要删除该表,那么用户就不会使用该表...

为什么不测试一下呢?除非有人对此进行了涵盖几个不同变量的广泛研究,否则我怀疑您得到的不仅仅是准受过教育的猜测。

关于sql - 我应该在删除表之前截断表以避免日志记录开销吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587909/

相关文章:

mysql - 简单的 SQL 连接理解?

sql - 如何在另一个存储过程中使用值?

sql - rdbms 的算法,select 语句

mysql - 如何展示没有值(value)的数据

mysql - SQL语法——左连接

sql-server - 我可以将 select 语句中的 select 转换为自连接吗?

mysql - SQL 查询返回仅在 (x) 日期之前订购的帐号列表

sql - 如何在更改列字符串之前从 SQL 表中获取所有行?

sql-server - 更新 VARBINARY(max) 列时 .WRITE(NULL, NULL, NULL) 的语义

sql - 将文本解析为多列