任何人都可以解釋公共表表達式(CTE)表和易變表之間的區別,他們在哪種情況下表現更好。Teradata中CTE和易失性表之間的差異
我們可以創建&下降揮發性表作爲我們的SQL的一部分,正是CTE將有更好的表現,同時比較揮發性表?
任何人都可以解釋公共表表達式(CTE)表和易變表之間的區別,他們在哪種情況下表現更好。Teradata中CTE和易失性表之間的差異
我們可以創建&下降揮發性表作爲我們的SQL的一部分,正是CTE將有更好的表現,同時比較揮發性表?
他們幾乎沒有可比性,因爲他們是如此不同的對象。
揮發性表是一個實際的表中存儲的實際數據。它就像常規表一樣創建,但是使用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。如果您要在一個過程中反覆重複使用同一組數據,並且您需要臨時存儲該數據集的地方,請使用易失性表。
編輯:從Teradata Developer交換(http://forums.teradata.com/forum/database/diff-between-cte-and-volatile-tables-in-teradata)獲得更多信息 – Satish