Macros 在Teradata中执行宏和执行宏中包含的指令有什么区别?

Macros 在Teradata中执行宏和执行宏中包含的指令有什么区别?,macros,teradata,Macros,Teradata,有时可以很好地观察到,宏中的单个指令的执行速度比Teradata中的整个宏快?这只是一种错觉,还是背后有什么逻辑?我是Teradata的新手,如果有人能从基础上解释原因,我将不胜感激 宏与多状态请求(MSR)完全相同 当您EXPLAIN EXEC mymacro时,您会注意到宏中的所有语句都已完成,然后是最后一步结束事务 现在,如果作为独立事务执行DELETE ALL,这是一种快速路径删除,一种TRUNCATE,因为优化器知道这是该表的最后一次修改,并且已提交 然后您可能会在该表中插入一个INS

有时可以很好地观察到,宏中的单个指令的执行速度比Teradata中的整个宏快?这只是一种错觉,还是背后有什么逻辑?我是Teradata的新手,如果有人能从基础上解释原因,我将不胜感激

宏与多状态请求(MSR)完全相同

当您
EXPLAIN EXEC mymacro
时,您会注意到宏中的所有语句都已完成,然后是最后一步
结束事务

现在,如果作为独立事务执行
DELETE ALL
,这是一种快速路径删除,一种
TRUNCATE
,因为优化器知道这是该表的最后一次修改,并且已提交

然后您可能会在该表中插入一个
INSERT SELECT
,这也是一个快速路径,因为该表在事务开始时是空的


现在您将这两个语句都放在一个宏中:
DELETE
not最后一次修改,
INSERT SELECT
not到一个空表中,因此这两个语句都将被临时记录。当然这要慢得多…

“现在您将这两个语句都放在一个宏中:DELETE不是最后一次修改,INSERT SELECT也不是放在一个空表中,因此这两个语句都是临时日志。当然这要慢得多…”。。这部分我拿不到。你能解释一下吗?如果我们知道deleteall不是瞬态日志,那么这些语句是如何进行瞬态日志记录的呢?请解释。@user3655102:
DELETE ALL
如果优化器知道这是该表的最后一次修改并且已提交,则不会记录日志。但是现在,下面的
INSERT
可能会失败,然后您必须能够回滚,因此日志。