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