繁体   English   中英

DB2带条款

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM