据我了解,使用TRUNCATE
是一种最小记录操作,不会记录每条记录的删除,而DROP
会记录删除操作。
因此,可以安全地假设,如果我想删除一个相对较大的表,并且希望尽快完成并且日志记录开销尽可能小,我应该在之前 TRUNCATE TABLE
我删除表
?在 RECOVERY SIMPLE
中执行此操作有什么不同吗?
我应该注意,这需要以自动化方式(在预先编写的脚本内)进行,因为这将部署到客户端数据库,其中停机时间和日志文件增长都可能成为问题。
最佳答案
虽然 TRUNCATE 不记录单个行,但它会记录页面/范围。这就是为什么你可以回滚截断(很多人不知道)。我的猜测是,如果你只是截断然后删除它实际上会比单独删除慢。如果您在两者之间提交,也许不会,但这也取决于日志事件、恢复模型、何时到达检查点等。
为什么速度在这里很重要?如果您要删除该表,那么用户就不会使用该表...
为什么不测试一下呢?除非有人对此进行了涵盖几个不同变量的广泛研究,否则我怀疑您得到的不仅仅是准受过教育的猜测。
关于sql - 我应该在删除表之前截断表以避免日志记录开销吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587909/