2015-01-07 315 views
1

我最近被指定使用Teradata进行项目。 我被告知要严格使用DROP + CREATE而不是DELETE ALL,因为后者“会留下一些空间”。这对我来说是违反直觉的,我认为这可能是错误的。我在网上搜索了两种方法之间的比较,但我什么也没找到。 这只会强化我的观点,即DELETE ALL不会遇到上述问题。然而,如果是这种情况,我必须证明它(实际上和理论上都是如此)。Teradata全部删除与删除+创建

所以,我的问题是:这两种方法之间的空间分配是否存在差异?如果不是,是否有证明它的正式文件(用户指南,技术规范,其他)?

谢谢!

+0

是否有可能在DBC.DiskSpace中报告的空间是表头?如果您在不填充新表的情况下执行DROP和CREATE,则该空间将存在。 –

回答

1

这里有一个讨论:http://teradataforum.com/teradata/20120403_105705.htm关于同一主题(虽然它并没有真正回答“留下一些空间分配部分”部分)。他们实际上建议DELETE ALL但对于其他(性能)的原因:

我还要举以防万一链接去死:

“全部删除”会更快,虽然是实际存在往往是不他们的表现有很大的不同。

但是,特别是对于定期运行的进程(比如每日批处理),我建议使用“全部删除”方法。这样可以减少工作量,因为它只会删除数据并保留定义。请记住,如果删除了定义,则需要访问多个字典表,当然,当您重新创建对象时,您必须访问那些相同的表(通常)。

除了性能方面,drop/create方法的缺点是每次创建对象时Teradata都会将“默认行”插入到AccessRights表中,即使通过角色安全性控制对对象的后续访问并且/或数据库级别的安全性。正如你可能知道AccessRights表格可能很容易变得很大而且很扭曲。根据我的经验,许多网站都有一个定期清理这个表的过程,删除多余的行。如果您的(通常为批处理)进程定期删除/创建对象,那么您只需向表中添加行,这些行先前已通过清理流程删除,并且未来将由同一流程删除。这听起来像是对我完全浪费时间。

1

你的印象是正确的,你没有发现任何提及“DELETE分配留下一些空间,”在任何地方,因为它是完全错误的:-)

全部删除类似于其他一个TRUNCATE DBMS和在大多数情况下使用fastpath处理: