2010-06-30 76 views
5

SO post詳細介紹了有關派生與臨時表格的一些優點。什麼時候不適合使用派生表?

除了性能以外,存在哪些情況下派生表不適合。

每個帖子的一個答案和一個例子會有所幫助。

+0

那[問題被標記爲SQL Server](HTTP ://stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-or-temporary-tables),所以信息應該被視爲特定於它而不是所有數據庫。 – 2010-06-30 16:19:47

回答

1

我寧願在臨時表上執行自加入而不是派生表。

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

與使用派生的表,在那裏你必須兩次寫整個查詢:

SELECT ... 
FROM (SELECT ...) 
JOIN (SELECT ...) ON ...conditions...; 

但另一種解決方案是使用公用表表達式這是源自表稍有不同:

WITH foo AS (SELECT ...) 
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

假設您使用支持此語法的數據庫品牌(Microsoft,Oracle,IBM,PostgreSQL)。

1

範圍可能是一個。我認爲臨時表可以被其他事務/過程等訪問。派生表僅限於聲明它們的塊。

1

如果你有訪問數據的臨時表中多個查詢它可能是成本更低,以避免重複產生的臨時數據:

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo WHERE ...conditions...; 

-- sometime later 

SELECT ... FROM foo WHERE ...different conditions...; 
相關問題