截断或删除并创建表

Mar*_*ram 18 t-sql sql-server truncate

我在SQL Server 2008 R2实例中有这个表,我有一个计划的进程,每晚运行它.该表在任何时候都可以有多达500K的记录.处理完这个表之后,我需要从中删除所有行,所以我想知道以下哪种方法会产生最少的开销(即过多的事务日志条目):

  1. 截断表
  2. 删除并重新创建表

删除表的内容是由于时间和它所做的额外事务日志条目.

共识似乎是截断,谢谢大家!

Yuc*_*uck 15

TRUNCATE TABLE是你最好的选择.来自MSDN:

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

这意味着它不会破坏您的事务日志.删除和创建表不仅需要更复杂的SQL,还需要其他权限.附加表(触发器,任何设置GRANTDENY等),也将不得不重新修建.


小智 9

截断表不会在事务日志中留下逐行条目 - 因此这两种解决方案都不会过多地混乱您的日志.如果是我,我会因为不得不每次都放弃而创造.


kev*_*ers 5

我会去TRUNCATE TABLE.当索引,触发器等被丢弃时,您可能会有开销.此外,您将失去权限,这些权限也必须与该表所需的任何其他必需对象一起重新创建.

同样在下面的MDSN中的DROP TABLE上,如果在同一批次中执行DROP和CREATE TABLE,则会提到一些问题

不应在同一批次的同一个表上执行DROP TABLE和CREATE TABLE.否则可能会发生意外错误.