DROP TABLE还是DELETE TABLE?哪个是最佳做法?

时间:2015-05-26 21:14:38

标签: sql sql-server

在我的SQL SERVER 2012实例中重新设计一些数据库。

我有数据库,我放置原始数据(来自供应商),然后我有客户端数据库,我将(基于客户端名称)创建一个只显示特定客户端数据的视图。

由于此数据不稳定(Google Adwords和Google DFA),我通常只删除过去6天,每天从供应商数据库中插入7天。这样做让我很高兴知道Google有时间巩固其数据。

我想回答的问题是:

    1.而不是使用视图,最好是使用“SELECT INTO”'语句和每天在客户端数据库中DROP表?

    我担心使用' DROP TABLE'自动化我的流程。方法不会很好地长期扩展。在自己测试时,似乎性能得到了提高,因为它不必扫描整个表的日期范围。我还使用了' date'的索引对此进行了测试。专栏和表现似乎仍然更好用“DROP TABLE'方法

    我在这里寻找最佳实践。

    注意:这是我的第一篇文章。所以我不太熟悉如何正确格式化。 :)

1 个答案:

答案 0 :(得分:8)

从表中删除行是一个非常耗时的过程。记录所有已删除的记录,并且服务器的性能受损。

相反,数据库提供truncate table。这将删除表的所有行而不记录行,但保持结构完整。此外,触发器,索引,约束,存储过程等不受删除行的影响。

在某些数据库中,如果从表中删除所有行,则操作实际上为truncate table。但是,SQL Server不是这些数据库之一。事实上,documentation列出了truncate作为删除所有行的最佳做法:

  

要删除表格中的所有行,请使用TRUNCATE TABLETRUNCATE TABLE   比DELETE更快,并且使用更少的系统和事务日志   资源。 TRUNCATE TABLE有限制,例如表格   不能参与复制。有关更多信息,请参阅TRUNCATE TABLE(Transact-SQL)

你可以放弃桌子。但是你也失去了辅助元数据 - 上面列出的所有东西。

我建议您截断表格并使用insert intobulk insert重新加载数据。