任何人都可以解释公用表表达式(CTE)表和易失性表之间的差异,在这些表中它们表现得更好。
我们可以创造&删除volatile表作为我们SQL的一部分,与易失性表相比,CTE的表现会更好吗?
答案 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表。