2014-01-23 70 views
5

我的後臺進程是批量更新/插入數據。我需要將一些數據存儲在臨時表中供以後使用。我有5個臨時表。如果我使用臨時表(CREATE TABLE #T),則需要2-3秒,但如果使用表變量(DECLARE @T TABLE),則需要超過90秒。這裏是一個樣本臨時表,爲什麼聲明表變量與臨時表相比非常慢?

CREATE TABLE #TempAttributes 
(
    AID int 
    ,PID int 
    ,ATypeValue nvarchar(MAX) 
    ,ATypeKey nvarchar(MAX) 
    ,PLanguageID int 
); 

爲什麼表變量很慢?

+5

[TempTbl-TblVar](http://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server)The @Martin Smith寫的文章非常簡潔明瞭,應該是你在找什麼。 –

回答

1

我想這是因爲表變量插入不支持並行計劃。

並行查詢處理是在MsSql中實現的並行查詢優化的一個進程,臨時表從中受益,而表變量卻沒有。

這是爲什麼我們不對大數據集使用表變量的主要原因之一(當範圍無關時)。

查看here瞭解更多信息。

+0

好這太好了 – user960567