2016-04-29 63 views
1

任何人都可以解釋公共表表達式(CTE)表和易變表之間的區別,他們在哪種情況下表現更好。Teradata中CTE和易失性表之間的差異

我們可以創建&下降揮發性表作爲我們的SQL的一部分,正是CTE將有更好的表現,同時比較揮發性表?

+0

編輯:從Teradata Developer交換(http://forums.teradata.com/forum/database/diff-between-cte-and-volatile-tables-in-teradata)獲得更多信息 – Satish

回答

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語句在它的側面掛出。

所以,當你問這將有更好的表現...有沒有辦法回答,沒有knowning,你正在嘗試使用揮發性表Vs的CTE的確切情況。

只要記住,揮發性表有它的查詢之前創建並加載數據。 CTE只是一個視圖...所以如果通過CTE查詢比創建,加載和查詢易失性表格需要更長的時間,那麼......請去CTE。如果您要在一個過程中反覆重複使用同一組數據,並且您需要臨時存儲該數據集的地方,請使用易失性表。

+0

嗨Nevill,謝謝你答覆,請你澄清一下,我們在SQL部分中引用CTE時,將重新執行整個SQL? – Satish

+0

非常好,是的。再次,您可以將cte名稱/別名分爲任何在其中定義的名稱,以更好地瞭解它可能的執行方式。這只是代碼可讀性和代碼維護。 – JNevill