[SQL SERVER][Performance]資料表值變數和暫存資料表效能測試

[SQL SERVER][Performance]資料表值變數和暫存資料表效能測試

今天發現資料表值參數處理小資料量有不賴的執行效能,

早期自己都會利用暫存資料表來處理,但在SQL2008中可以有另外的選擇了(多了資料表值參數新類型),

這篇我大概測試資料表值參數執行效能。

 

資料表參數部分資訊

image

 

動作:分別對資料表值參數和暫存資料表執行三次相同作業(資料量<=1000)。

第一次:

TVP

ET STATISTICS TIME ON
DECLARE @mytmp TABLE
(
id int,
name nvarchar(10),
email nvarchar(100)
)
 
INSERT INTO @mytmp
SELECT * FROM dbo.userd
SET STATISTICS TIME OFF

 

image

image

 

TMP

SET STATISTICS TIME ON
create table ##mytmp
(
id int,
name nvarchar(10),
email nvarchar(100)
)
 
INSERT INTO ##mytmp
SELECT * FROM dbo.userd
 
SET STATISTICS TIME OFF

 

image

image

 

第二次

TVP

image

image

 

TMP

image

image

 

第三次

TVP

image

image

 

TMP

image

image

 

結果:

image

 

 

加入簡單邏輯處理(join大Table比較可以看出效果)

TVP

image

image

 

TMP

image

image

 

結果:

image

 

結論:

資料表變數不存在記憶體並使用tempdb資源(建立temptable)。

處理大資料表效能差(和暫存資料表最大差異為統計值)。

 

 

參考

資料表值參數 (Database Engine)