[SQL SERVER][Memo]Partition Table對Insert影響
在MSDN上看到網友發問說:使用了Partition Table雖然Select獲得改善,但Insert卻慢得離譜,
雖然自己沒有真正測試過,但可以想像這是肯定的,這裡大概測試一下SQL2008 Partition Table並驗證自己的想法。
Table Layout。
Partition資料範圍。
新增資料到Partition Table。
整體執行計畫。
排序運算子成本:1520.6692。
資料表插入運算子成本:1554.26。
排序運算子成本:629.75、子樹成本:3900.45、I/O成本:408.75。
新增資料到Non-Partition Table。
整體執行計畫。
資料表插入運算子成本:1533.6138,子樹成本:1610.19。
排序運算子成本:571.35、子樹成本:2181.54、I/O成本:350.36。
結論:
查看該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的方法來處理。