2011-07-25 25 views
4

我有一個很大的用戶定義的表類型變量,它有129 Columns
我將在此變量中一次存儲2000-3000 Records,並將其傳遞給各種存儲過程和函數以獲取其他數據,並在相同類型的新變量中進行修改,並將此新變量返回給源SP。是因爲表類型參數只能作爲READONLY傳遞)。@table變量或#temp表:性能

這是我的算法。

SP1 
    @tmp tableType 
    { 
     INSERT @tmp EXEC 
     SP2 (@tmp) 

     INSERT @tmp EXEC 
     SP3 (@tmp) 

    } 

哪一個,我應該使用@table varible#temp table

回答

3

有一個有用的文章here它說:

像技術等諸多領域,沒有「正確」的答案在這裏。對於不會超出過程範圍的數據,通常在#temp表和表變量之間進行選擇。您的最終決定應取決於性能和合理的負載測試。隨着數據容量的增大和/或臨時數據的重複使用量的增加,您會發現使用#temp表格更有意義。根據您的環境,該閾值可能在任何地方 - 但是如果上述任何限制表示重大障礙,您顯然需要使用#temp表。

但是,另一種方法是有真正的表,其中任何事務中使用的所需行都使用GUID列表示。然後你只需要傳遞GUID作爲參數,這可以提高性能。但是,這可能不適合你。

我建議你試試這兩個選項,並看看SQL事件探查器,看看哪些選項提供最佳性能。

1

如果#tmp將被簡單地用作堆暫時存儲數據,然後我不認爲@#VS會有所作爲,特別是對一張只包含幾千行的表格。

唯一要記住的是,如果在某些時候你認爲你需要索引表,那麼臨時表顯然是選擇,因爲表變量不能被索引。除此之外,我從來沒有發現臨時表超過表變量,反之亦然。