[SQL SERVER][Memo]Partition Table對Insert影響

[SQL SERVER][Memo]Partition Table對Insert影響

MSDN上看到網友發問說:使用了Partition Table雖然Select獲得改善,但Insert卻慢得離譜,

雖然自己沒有真正測試過,但可以想像這是肯定的,這裡大概測試一下SQL2008  Partition Table並驗證自己的想法。

clip_image002

Table Layout。

 

clip_image004

Partition資料範圍。

 

clip_image006

新增資料到Partition Table。

 

clip_image008

clip_image010

整體執行計畫。

 

clip_image012

排序運算子成本:1520.6692。

 

clip_image013

資料表插入運算子成本:1554.26。

 

clip_image014

排序運算子成本:629.75、子樹成本:3900.45、I/O成本:408.75。

 

 

clip_image015

新增資料到Non-Partition Table。

 

clip_image016

clip_image017

整體執行計畫。

 

clip_image018

資料表插入運算子成本:1533.6138,子樹成本:1610.19。

 

clip_image019

排序運算子成本:571.35、子樹成本:2181.54、I/O成本:350.36。

 

clip_image021

 

結論:

查看該SQL Statement執行計畫,我們可以發現新增資料到Partition Table會比Non-Partition Table來的更花時間,

這是可以理解的,因為當目地是Partition Table時,SQL Server會去統計計算來源資料應該放在目地的那個Partition,

同時排序完後再蒐集輸入資料流合併單一輸出資料流,接者才開始將資料新增到目地Table,

而這些執行過程在Non-Partition Table是完全不需要的,換句話說Non-Partition Table省下計算、排序、蒐集合併資料流的成本(也當然更省時),

雖然Non-Partition Table的資料表插入階段成本最高(67%、運算子:1533.6138),

但我們可以和Partition Table的資料表插入階段(38%、運算子:1554.26)比較發現,

SQL優化器運算子成本依然還是Partition Table高於Non-Partition Table,

所以千萬不要認為使用了Partition Table可以提高insert,delete,update的效能。

如果要匯入大量資料(跨很多Partition),建議可以使用SWITCH PARTITION的方法來處理。