[英]DB2 With Clause
我是DB2的新手,我对with子句有疑问。 例如在以下查询中:
WITH values AS
(
SELECT user_id, user_data FROM USER WHERE user_age < 20
)
SELECT avg(values.user_data) FROM values
UNION
SELECT sum(values.user_data) FROM values
公用表表达式将执行多少次? with子句的结果将存储在临时表中还是对其进行两次子选择。 (我在这里使用with和union只是为了举一个例子,对不起我的英语不好)
正如@Vladimir Oselsky所提到的,仅查看执行计划将为您提供明确的答案。 在这个人为的示例中,CTE子选择可能会运行两次。
在DB2中,公用表表达式应在执行计划中创建“公用表表达式”节点(请参见此处的文档)。 该节点明确表示:
它们充当中间表。 传统上,嵌套表表达式也可以实现此目的。 但是,公用表表达式在实例化后可以被多次引用。 嵌套表表达式不能。
我读这句话的意思是CTE仅被评估一次,实例化然后多次使用。 同样,如果仅引用CTE一次,则“实例”将被优化。
请注意,这是Postgres处理CTE(实例化子查询)的方式,而不是SQL Server处理它们的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.