Teradata中CTE和易失性表之间的差异

时间:2016-04-29 20:12:25

标签: teradata common-table-expression

任何人都可以解释公用表表达式(CTE)表和易失性表之间的差异,在这些表中它们表现得更好。

我们可以创造&删除volatile表作为我们SQL的一部分,与易失性表相比,CTE的表现会更好吗?

1 个答案:

答案 0 :(得分:1)

它们几乎没有可比性,因为它们是不同的对象。

易失性表是存储实际数据的实际表。它的创建方式与常规表一样,但使用VOLATILE关键字(和其他陷阱)。当会话结束时,它和存储在其中的所有数据都会消失。

另一方面,CTE更像是一种观点。它不存储任何数据。您可以将其视为代表其中定义的任何符号的符号。

例如:

WITH CTE myCTE (SELECT * FROM sometable WHERE id=3)
SELECT * 
FROM myCTE
WHERE myCTE.name in (SELECT max(name) FROM myCTE);

与以下内容相同:

WITH CTE myCTE ()
SELECT * 
FROM (SELECT * FROM sometable WHERE id=3) myCTE
WHERE myCTE.name in (SELECT max(name) FROM (SELECT * FROM sometable WHERE id=3) myCTE);

我们只需将符号“myCTE”替换为其旁边的select语句。

所以,当你问哪个会表现得更好......如果不知道你试图使用易变表与CTE的确切情况,就没有办法回答这个问题。

请记住,在查询之前,必须创建一个Volatile表并加载数据。 CTE只是一个视图......因此,如果通过CTE查询比创建,加载和查询易失性表需要更长的时间,那么......请使用CTE。如果要在一个过程中反复重复同一组数据,并且需要一个临时存储该数据集的位置,那么请使用volatile表。