Teradata 中的 CTE 和 Volatile 表之间的区别
Diff between CTE and Volatile tables in Teradata
任何人都可以解释一下 Common Table Expression(CTE)Tables 和 Volatile 表之间的区别,在哪些情况下它们表现更好。
因为我们可以创建和删除易失性表作为我们 SQL 的一部分,与易变性表相比,CTE 在哪些方面表现更好?
它们几乎没有可比性,因为它们是如此不同。
A Volatile table 是一个实际的 table 存储实际数据。它的创建就像一个常规的 table,但使用了 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 语句。
因此,当您询问哪个性能更好时...如果不知道您尝试使用 volatile table 与 CTE 的确切情况,就无法回答这个问题。
请记住,在查询之前必须创建一个 Volatile table 并加载数据。 CTE 只是一个视图……因此,如果通过 CTE 进行查询比创建、加载和查询易失性 table 花费的时间更长,那么……使用 CTE。如果你打算在一个过程中一次又一次地重复命中同一组数据,并且你需要一个地方来临时存储该数据集,那么请使用 volatile table。
任何人都可以解释一下 Common Table Expression(CTE)Tables 和 Volatile 表之间的区别,在哪些情况下它们表现更好。
因为我们可以创建和删除易失性表作为我们 SQL 的一部分,与易变性表相比,CTE 在哪些方面表现更好?
它们几乎没有可比性,因为它们是如此不同。
A Volatile table 是一个实际的 table 存储实际数据。它的创建就像一个常规的 table,但使用了 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 语句。
因此,当您询问哪个性能更好时...如果不知道您尝试使用 volatile table 与 CTE 的确切情况,就无法回答这个问题。
请记住,在查询之前必须创建一个 Volatile table 并加载数据。 CTE 只是一个视图……因此,如果通过 CTE 进行查询比创建、加载和查询易失性 table 花费的时间更长,那么……使用 CTE。如果你打算在一个过程中一次又一次地重复命中同一组数据,并且你需要一个地方来临时存储该数据集,那么请使用 volatile table。