Sql server 2005 为什么要在删除临时表之前立即截断?

Sql server 2005 为什么要在删除临时表之前立即截断?,sql-server-2005,tsql,temp-tables,Sql Server 2005,Tsql,Temp Tables,我看到一些代码,其中作者在删除临时表之前立即截断了临时表。这样做有什么原因吗 TRUNCATE TABLE #Temp DROP TABLE #Temp 可能是为了查看TRUNCATE命令是否由于存在外键而引发异常?可能是因为作者的印象是,如果表已经为空,删除表会更快,并且知道TRUNCATE会比DELETE更快。可能是个傻瓜。(并不是说我是完美的) 在非常大的临时表上,有时先截断然后删除会更快,因为truncate只是移动指针。通常不需要它,因为临时表会自动删除。另一个原因是删除表是一个完全

我看到一些代码,其中作者在删除临时表之前立即截断了临时表。这样做有什么原因吗

TRUNCATE TABLE #Temp
DROP TABLE #Temp

可能是为了查看
TRUNCATE
命令是否由于存在外键而引发异常?

可能是因为作者的印象是,如果表已经为空,删除表会更快,并且知道TRUNCATE会比DELETE更快。

可能是个傻瓜。(并不是说我是完美的)

在非常大的临时表上,有时先截断然后删除会更快,因为truncate只是移动指针。通常不需要它,因为临时表会自动删除。

另一个原因是
删除表是一个完全记录的操作,所以先截断(从不记录)您可以降低事务日志记录开销。

另一种可能是,编码器试图避免在temp table大于8MB时发生延迟删除。即截断它,然后将其丢弃。我不确定SQL引擎是否会被这愚弄,但它可能会强制同步清理。我不明白您为什么要这样做,也许是为了避免累积延迟丢弃(临时表用于销毁)的问题。

我想这并不是不可能的,但这段特定代码不在任何类型的错误处理块中。除了错误的假设,我想不出任何其他原因(正如CodeByMoonlight在回答中提到的)我最近了解到一个截断被记录(但不像是删除),但我理解你的观点,乔,你把它颠倒了。删除被记录了,截断没有。+1 Alex,因为我不知道记录了drop(对我来说这没有意义).有一些优秀的分析。TL;DR:不截断的DROP更有效。