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

What is the difference between executing a macro and executing the contained instructions within it in Teradata?

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

宏与多语句请求 (MSR) 完全相同。

当您 EXPLAIN EXEC mymacro 时,您会注意到 所有 宏中的语句都已完成,然后是最后的 END TRANSACTION 步骤。

现在,如果您将 DELETE ALL 之类的操作作为独立事务执行,则它是 快速路径删除,一种 TRUNCATE,因为优化器知道这是 table 的最后一次修改并且它已提交。

然后你可能有一个 INSERT SELECT 到那个 table,它也是 fast-path,因为 table 在事务的开始。

现在你把两者都放在一个宏中:DELETE 不是 最后修改,INSERT SELECT 不是 变成一个空的 table,所以这两个语句都将被瞬态记录。当然这样会慢很多...