我最近被分配到一个使用Teradata的项目。我被告知严格使用DROP+CREATE而不是DELETE ALL,因为后者“留下了一些空间”。这对我来说很反直觉,我认为这可能是错误的。我在网上搜索了两种方法的比较,但没有找到任何信息。这只加强了我认为DELETE ALL不会受到上述问题的影响的信念。然而,如果是这样的话,我必须证明它(从实践和理论上)。因此,我的问题是:这两种方法之间是否存在空间分配方面的差异?如果没有,是否有官方文件(用户指南、技术规范或其他)可以证明这一点?谢谢!
DELETE ALL
,但出于其他(性能)原因:
我引用一下以防链接失效:
“删除所有”将更快,虽然实际上它们之间的性能差异通常不大。
然而,特别是对于经常运行的流程(比如每日批处理),我推荐使用“删除所有”方法。这样做会少做一些工作,因为它仅仅移除数据,而保留定义。请记住,如果删除定义,则需要访问多个字典表,当然在重新创建对象时您还必须访问这些表(通常情况下)。
除了性能方面,删除/创建方法的缺点是每次创建对象时,Teradata都会向AccessRights表插入“默认行”,即使随后对该对象的访问是通过角色安全和/或数据库级别安全进行控制的。就像你可能知道的那样,AccessRights表很容易变得很大而且数据分布不均。根据我的经验,许多站点都会有一个定期清理该表的过程,以删除冗余行。如果您(通常批处理)的流程经常删除/创建对象,则只是将先前被清理过的行添加到表中,并在未来再次通过相同的过程删除。这对我来说听起来完全是浪费时间。