在我的SQL SERVER 2012实例中重新设计一些数据库。
我有数据库,我放置原始数据(来自供应商),然后我有客户端数据库,我将(基于客户端名称)创建一个只显示特定客户端数据的视图。
由于此数据不稳定(Google Adwords和Google DFA),我通常只删除过去6天,每天从供应商数据库中插入7天。这样做让我很高兴知道Google有时间巩固其数据。
我想回答的问题是:
我担心使用' DROP TABLE'自动化我的流程。方法不会很好地长期扩展。在自己测试时,似乎性能得到了提高,因为它不必扫描整个表的日期范围。我还使用了' date'的索引对此进行了测试。专栏和表现似乎仍然更好用“DROP TABLE'方法
我在这里寻找最佳实践。
注意:这是我的第一篇文章。所以我不太熟悉如何正确格式化。 :)
答案 0 :(得分:8)
从表中删除行是一个非常耗时的过程。记录所有已删除的记录,并且服务器的性能受损。
相反,数据库提供truncate table
。这将删除表的所有行而不记录行,但保持结构完整。此外,触发器,索引,约束,存储过程等不受删除行的影响。
在某些数据库中,如果从表中删除所有行,则操作实际上为truncate table
。但是,SQL Server不是这些数据库之一。事实上,documentation列出了truncate
作为删除所有行的最佳做法:
要删除表格中的所有行,请使用
TRUNCATE TABLE
。TRUNCATE TABLE
比DELETE
更快,并且使用更少的系统和事务日志 资源。TRUNCATE TABLE
有限制,例如表格 不能参与复制。有关更多信息,请参阅TRUNCATE TABLE
(Transact-SQL)
你可以放弃桌子。但是你也失去了辅助元数据 - 上面列出的所有东西。
我建议您截断表格并使用insert into
或bulk insert
重新加载数据。