2013-06-03 43 views
27

我有一個問題,以決定是否使用視圖或臨時表。使用什麼?查看或臨時表

我有一個存儲過程,我從程序調用。在該SP中,將長查詢的結果存儲在臨時表中,命名列並對該表進行另一個查詢將結果存儲在標籤或網格視圖中或其他內容中,然後刪除臨時表。我也可以將查詢結果存儲在視圖中並對該視圖進行查詢。那麼,我有什麼更好的或者在什麼情況下使用VIEW/Temp Table。

根據我的研究,一個視圖具有以下優點:安全性,簡單性和列名稱規範。我的臨時桌也滿足了這一切(根據我的觀點)。

+1

除非你陳述自己的目標,並根據他們對你的重要性對他們進行排名,否則這實在太籠統了。 – Tim

+0

這個問題只有可能的答案是:你必須嘗試兩種方法,看看哪一個更好。 –

回答

28

如果查詢是「long」,並且您正在訪問多個查詢的結果,那麼臨時表是更好的選擇。

一般來說,一個視圖只是select聲明的捷徑。如果並不意味着結果會被運行和處理。如果您使用視圖,則每次使用結果都需要重新生成。儘管視圖的後續運行可能更有效(比如說,因爲視圖查詢使用的頁面在緩存中),但臨時表實際上存儲結果。

在SQL Server中,您也可以使用表變量(declare @t table . . .)。

在單個存儲過程中使用臨時表(或表變量)在安全性,簡單性和列名方面似乎影響不大。安全性將通過訪問存儲過程來處理。任何解決方案都需要列名稱。沒有更多的信息,簡單性很難判斷,但沒有什麼特別複雜的。

6

取決於

一個視圖必須複製你的「長查詢」每次運行時的處理,而一個臨時表中存儲的結果。

那麼你想使用更多的處理或更多的存儲?

你可以存儲一些視圖值(持久索引),這可以幫助處理,但是你沒有提供足夠的信息來真正探索這個。

如果您正在討論的是在單個過程調用中只存儲用於使用的數據,那麼臨時表是一種可行的方法。

2

這實際上是一個情景和操作特定的問題和答案可能會有所不同,這取決於場景的要求。 但是,我想補充的一點是,如果您使用視圖來存儲複雜查詢的結果,而這些查詢又反過來用於GridView的操作,那麼對複雜操作執行更新操作可能會很麻煩觀點。相反,臨時表可以滿足這一點。

此外,還有場景的情況下,視圖可能是一個更好的選擇[如果不正確處理多個數據庫服務器],但它取決於你想要做什麼。